[INFO] cloning repository https://github.com/clinta715/hdaw
[INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/clinta715/hdaw" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fclinta715%2Fhdaw", kill_on_drop: false }`
[INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fclinta715%2Fhdaw'...
[INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }`
[INFO] [stdout] 8b54c9c867129e834842dada85e65b6f2088dee2
[INFO] testing clinta715/hdaw against master#cced03bfd61a304243a34504618ecec86c17063f for pr-154065-2
[INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2Fclinta715%2Fhdaw" "/workspace/builds/worker-6-tc1/source", kill_on_drop: false }`
[INFO] [stderr] Cloning into '/workspace/builds/worker-6-tc1/source'...
[INFO] [stderr] done.
[INFO] started tweaking git repo https://github.com/clinta715/hdaw
[INFO] finished tweaking git repo https://github.com/clinta715/hdaw
[INFO] tweaked toml for git repo https://github.com/clinta715/hdaw written to /workspace/builds/worker-6-tc1/source/Cargo.toml
[INFO] validating manifest of git repo https://github.com/clinta715/hdaw on toolchain cced03bfd61a304243a34504618ecec86c17063f
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }`
[INFO] crate git repo https://github.com/clinta715/hdaw already has a lockfile, it will not be regenerated
[INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }`
[INFO] [stderr]     Updating crates.io index
[INFO] [stderr]  Downloading crates ...
[INFO] [stderr]   Downloaded spectrum-analyzer v1.7.0
[INFO] [stderr]   Downloaded zvariant_utils v3.3.1
[INFO] [stderr]   Downloaded zvariant_derive v5.11.0
[INFO] [stderr]   Downloaded ashpd v0.11.1
[INFO] [stderr]   Downloaded zvariant v5.11.0
[INFO] [stderr]   Downloaded zbus v5.15.0
[INFO] [stderr]   Downloaded zbus_names v4.3.2
[INFO] [stderr]   Downloaded zbus_macros v5.15.0
[INFO] [stderr]   Downloaded uds_windows v1.2.1
[INFO] [stderr]   Downloaded wayland-sys v0.31.11
[INFO] [stderr]   Downloaded microfft v0.6.0
[INFO] [stderr]   Downloaded async-signal v0.2.14
[INFO] [stderr]   Downloaded wayland-scanner v0.31.10
[INFO] [stderr]   Downloaded wayland-client v0.31.14
[INFO] [stderr]   Downloaded wayland-backend v0.3.15
[INFO] [stderr]   Downloaded link-cplusplus v1.0.12
[INFO] [stderr]   Downloaded wayland-protocols v0.32.12
[INFO] [stderr]   Downloaded quick-xml v0.39.4
[INFO] [stderr]   Downloaded qt-build-utils v0.8.1
[INFO] [stderr]   Downloaded cxx-qt v0.8.1
[INFO] [stderr]   Downloaded cxxbridge-flags v1.0.194
[INFO] [stderr]   Downloaded cxx-gen v0.7.194
[INFO] [stderr]   Downloaded clang-format v0.3.0
[INFO] [stderr]   Downloaded cxx-qt-macro v0.8.1
[INFO] [stderr]   Downloaded cxx-qt-build v0.8.1
[INFO] [stderr]   Downloaded codespan-reporting v0.13.1
[INFO] [stderr]   Downloaded cxx v1.0.194
[INFO] [stderr]   Downloaded cxxbridge-macro v1.0.194
[INFO] [stderr]   Downloaded scratch v1.0.9
[INFO] [stderr]   Downloaded cxxbridge-cmd v1.0.194
[INFO] [stderr]   Downloaded cxx-build v1.0.194
[INFO] [stderr]   Downloaded cxx-qt-gen v0.8.1
[INFO] [stderr]   Downloaded cxx-qt-lib v0.8.1
[INFO] [stderr]   Downloaded timestretch v0.4.0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }`
[INFO] [stdout] 141a4c4da1066a3a3fd43a2934403d5e4877551da320c6790330eac853d764d0
[INFO] running `Command { std: "docker" "start" "-a" "141a4c4da1066a3a3fd43a2934403d5e4877551da320c6790330eac853d764d0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "inspect" "141a4c4da1066a3a3fd43a2934403d5e4877551da320c6790330eac853d764d0", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "141a4c4da1066a3a3fd43a2934403d5e4877551da320c6790330eac853d764d0", kill_on_drop: false }`
[INFO] [stdout] 141a4c4da1066a3a3fd43a2934403d5e4877551da320c6790330eac853d764d0
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "build" "--frozen" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 82a61f854d6d64e7ecf2280c68df240783350511354e8636c3ffb64ac095525c
[INFO] running `Command { std: "docker" "start" "-a" "82a61f854d6d64e7ecf2280c68df240783350511354e8636c3ffb64ac095525c", kill_on_drop: false }`
[INFO] [stderr]    Compiling proc-macro2 v1.0.106
[INFO] [stderr]    Compiling winnow v1.0.2
[INFO] [stderr]    Compiling quote v1.0.45
[INFO] [stderr]    Compiling rustix v1.1.4
[INFO] [stderr]    Compiling hashbrown v0.17.1
[INFO] [stderr]    Compiling serde v1.0.228
[INFO] [stderr]    Compiling linux-raw-sys v0.12.1
[INFO] [stderr]    Compiling toml_datetime v1.1.1+spec-1.1.0
[INFO] [stderr]    Compiling bitflags v2.11.1
[INFO] [stderr]    Compiling futures-lite v2.6.1
[INFO] [stderr]    Compiling dasp_sample v0.11.0
[INFO] [stderr]    Compiling endi v1.1.1
[INFO] [stderr]    Compiling cc v1.2.62
[INFO] [stderr]    Compiling wayland-sys v0.31.11
[INFO] [stderr]    Compiling piper v0.2.5
[INFO] [stderr]    Compiling form_urlencoded v1.2.2
[INFO] [stderr]    Compiling quick-xml v0.39.4
[INFO] [stderr]    Compiling dasp_ring_buffer v0.11.0
[INFO] [stderr]    Compiling wayland-client v0.31.14
[INFO] [stderr]    Compiling num-integer v0.1.46
[INFO] [stderr]    Compiling num-complex v0.4.6
[INFO] [stderr]    Compiling alsa-sys v0.3.1
[INFO] [stderr]    Compiling uuid v1.23.1
[INFO] [stderr]    Compiling ordered-stream v0.2.0
[INFO] [stderr]    Compiling strength_reduce v0.2.4
[INFO] [stderr]    Compiling primal-check v0.3.4
[INFO] [stderr]    Compiling rand v0.9.4
[INFO] [stderr]    Compiling crossbeam-epoch v0.9.18
[INFO] [stderr]    Compiling transpose v0.2.3
[INFO] [stderr]    Compiling dasp_frame v0.11.0
[INFO] [stderr]    Compiling dasp_window v0.11.1
[INFO] [stderr]    Compiling cpal v0.16.0
[INFO] [stderr]    Compiling syn v2.0.117
[INFO] [stderr]    Compiling pxfm v0.1.29
[INFO] [stderr]    Compiling raw-window-handle v0.6.2
[INFO] [stderr]    Compiling rfd v0.15.4
[INFO] [stderr]    Compiling alsa v0.9.1
[INFO] [stderr]    Compiling indexmap v2.14.0
[INFO] [stderr]    Compiling rustfft v6.4.1
[INFO] [stderr]    Compiling microfft v0.6.0
[INFO] [stderr]    Compiling wayland-scanner v0.31.10
[INFO] [stderr]    Compiling crossbeam-deque v0.8.6
[INFO] [stderr]    Compiling png v0.18.1
[INFO] [stderr]    Compiling arc-swap v1.9.1
[INFO] [stderr]    Compiling dasp_peak v0.11.0
[INFO] [stderr]    Compiling dasp_rms v0.11.0
[INFO] [stderr]    Compiling blocking v1.6.2
[INFO] [stderr]    Compiling async-executor v1.14.0
[INFO] [stderr]    Compiling dasp_envelope v0.11.0
[INFO] [stderr]    Compiling dasp_interpolate v0.11.0
[INFO] [stderr]    Compiling dasp_slice v0.11.0
[INFO] [stderr]    Compiling dasp_signal v0.11.0
[INFO] [stderr]    Compiling wayland-backend v0.3.15
[INFO] [stderr]    Compiling float-cmp v0.10.0
[INFO] [stderr]    Compiling async-fs v2.2.0
[INFO] [stderr]    Compiling crossbeam-channel v0.5.15
[INFO] [stderr]    Compiling crossbeam-queue v0.3.12
[INFO] [stderr]    Compiling pollster v0.4.0
[INFO] [stderr]    Compiling hdaw v0.1.0 (/opt/rustwide/workdir)
[INFO] [stderr]    Compiling dasp v0.11.0
[INFO] [stderr]    Compiling spectrum-analyzer v1.7.0
[INFO] [stderr]    Compiling tokio v1.52.3
[INFO] [stderr]    Compiling hound v3.5.1
[INFO] [stderr]    Compiling crossbeam v0.8.4
[INFO] [stderr]    Compiling toml_parser v1.1.2+spec-1.1.0
[INFO] [stderr]    Compiling toml_edit v0.25.11+spec-1.1.0
[INFO] [stderr]    Compiling proc-macro-crate v3.5.0
[INFO] [stderr]    Compiling moxcms v0.8.1
[INFO] [stderr]    Compiling synstructure v0.13.2
[INFO] [stderr]    Compiling polling v3.11.0
[INFO] [stderr]    Compiling async-io v2.6.0
[INFO] [stderr]    Compiling zerofrom-derive v0.1.7
[INFO] [stderr]    Compiling serde_derive v1.0.228
[INFO] [stderr]    Compiling yoke-derive v0.8.2
[INFO] [stderr]    Compiling zerovec-derive v0.11.3
[INFO] [stderr]    Compiling displaydoc v0.2.5
[INFO] [stderr]    Compiling enumflags2_derive v0.7.12
[INFO] [stderr]    Compiling tracing-attributes v0.1.31
[INFO] [stderr]    Compiling futures-macro v0.3.32
[INFO] [stderr]    Compiling async-recursion v1.1.1
[INFO] [stderr]    Compiling serde_repr v0.1.20
[INFO] [stderr]    Compiling async-trait v0.1.89
[INFO] [stderr]    Compiling async-signal v0.2.14
[INFO] [stderr]    Compiling async-process v2.5.0
[INFO] [stderr]    Compiling async-net v2.0.0
[INFO] [stderr]    Compiling futures-util v0.3.32
[INFO] [stderr]    Compiling zerofrom v0.1.8
[INFO] [stderr]    Compiling yoke v0.8.2
[INFO] [stderr]    Compiling zerovec v0.11.6
[INFO] [stderr]    Compiling zerotrie v0.2.4
[INFO] [stderr]    Compiling tracing v0.1.44
[INFO] [stderr]    Compiling tracing-subscriber v0.3.23
[INFO] [stderr]    Compiling tinystr v0.8.3
[INFO] [stderr]    Compiling potential_utf v0.1.5
[INFO] [stderr]    Compiling icu_locale_core v2.2.0
[INFO] [stderr]    Compiling icu_collections v2.2.0
[INFO] [stderr]    Compiling wayland-protocols v0.32.12
[INFO] [stderr]    Compiling image v0.25.10
[INFO] [stderr]    Compiling icu_provider v2.2.0
[INFO] [stderr]    Compiling zvariant_utils v3.3.1
[INFO] [stderr]    Compiling enumflags2 v0.7.12
[INFO] [stderr]    Compiling icu_normalizer v2.2.0
[INFO] [stderr]    Compiling icu_properties v2.2.0
[INFO] [stderr]    Compiling ron v0.12.1
[INFO] [stderr]    Compiling timestretch v0.4.0
[INFO] [stderr]    Compiling zvariant_derive v5.11.0
[INFO] [stderr]    Compiling zvariant v5.11.0
[INFO] [stderr]    Compiling idna_adapter v1.2.2
[INFO] [stderr]    Compiling idna v1.1.0
[INFO] [stderr]    Compiling url v2.5.8
[INFO] [stderr]    Compiling zbus_names v4.3.2
[INFO] [stderr]    Compiling zbus_macros v5.15.0
[INFO] [stderr]    Compiling zbus v5.15.0
[INFO] [stderr]    Compiling ashpd v0.11.1
[INFO] [stdout] warning: unused import: `crate::audio::effects::Effect`
[INFO] [stdout]  --> src/project/track.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::audio::effects::Effect;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/app/mod.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct HdawApp {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] 17 |     pub project: Arc<Mutex<Project>>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 18 |     pub undo_stack: Arc<Mutex<UndoStack>>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 19 |     pub audio_engine: Arc<Mutex<AudioEngine>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 20 |     pub playback: PlaybackManager,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 21 |     pub selected_clips: Arc<Mutex<HashSet<Uuid>>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 22 |     pub clipboard: Arc<Mutex<Vec<AudioClip>>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 23 |     pub waveform_peaks: Arc<Mutex<HashMap<String, WaveformPeaks>>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 24 |     pub selected_track_id: Arc<Mutex<Option<Uuid>>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 25 |     pub selected_bus_id: Arc<Mutex<Option<Uuid>>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 26 |     pub drag_state: Arc<Mutex<Option<drag::DragState>>>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 27 |     pub automation_drag: Arc<Mutex<Option<drag::AutomationDragState>>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `playback` is never used
[INFO] [stdout]   --> src/app/mod.rs:85:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl HdawApp {
[INFO] [stdout]    | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn playback(&self) -> PlaybackManager {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/app/drag.rs:6:9
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub(crate) struct DragState {
[INFO] [stdout]    |                   --------- fields in this struct
[INFO] [stdout]  6 |     pub clip_id: Uuid,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]  7 |     pub track_id: Uuid,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]  8 |     pub track_index: i32,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]  9 |     pub original_pos: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 10 |     pub original_length: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 11 |     pub original_fade_in: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 12 |     pub original_fade_out: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 13 |     pub click_offset: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 14 |     pub drag_edge: Option<DragEdge>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 15 |     pub destination_track_id: Option<Uuid>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DragState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Left`, `Right`, `Stretch`, `FadeIn`, and `FadeOut` are never constructed
[INFO] [stdout]   --> src/app/drag.rs:19:28
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub(crate) enum DragEdge { Left, Right, Stretch, FadeIn, FadeOut }
[INFO] [stdout]    |                 --------   ^^^^  ^^^^^  ^^^^^^^  ^^^^^^  ^^^^^^^
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 variants in this enum
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DragEdge` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `track_id`, `parameter_name`, `point_index`, `original_point`, `click_offset_time`, and `click_offset_value` are never read
[INFO] [stdout]   --> src/app/drag.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub(crate) struct AutomationDragState {
[INFO] [stdout]    |                   ------------------- fields in this struct
[INFO] [stdout] 23 |     pub track_id: Uuid,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 24 |     pub parameter_name: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 25 |     pub point_index: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 26 |     pub original_point: AutomationPoint,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 27 |     pub click_offset_time: f64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 28 |     pub click_offset_value: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AutomationDragState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebuild_waveform_cache` is never used
[INFO] [stdout]  --> src/app/io.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub(crate) fn rebuild_waveform_cache(
[INFO] [stdout]   |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/audio/buffer.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl AudioBuffer {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 13 |     pub fn with_capacity(channels: u16, sample_rate: u32, capacity: usize) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn len(&self) -> usize { self.samples.len() }
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 22 |     pub fn is_empty(&self) -> bool { self.samples.is_empty() }
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 23 |     pub fn frames(&self) -> usize { if self.channels > 0 { self.samples.len() / self.channels as usize } else { 0 } }
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 24 |     pub fn duration_secs(&self) -> f64 { self.frames() as f64 / self.sample_rate as f64 }
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 25 |     pub fn clear(&mut self) { self.samples.clear(); }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 26 |     pub fn resize(&mut self, new_len: usize, value: f32) { self.samples.resize(new_len, value); }
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 27 |     pub fn push_sample(&mut self, sample: f32) { self.samples.push(sample); }
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub fn get_frame(&self, frame: usize) -> Option<Vec<f32>> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn fill_silence(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn mix(&mut self, other: &AudioBuffer, volume: f32) {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn apply_gain(&mut self, gain: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn apply_pan(&mut self, pan: f32) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_name`, `is_bypassed`, and `get_gain_reduction` are never used
[INFO] [stdout]   --> src/audio/effects/mod.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub trait Effect: Send + Sync {
[INFO] [stdout]    |           ------ methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 13 |     fn get_name(&self) -> &str;
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 14 |     fn is_bypassed(&self) -> bool;
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 15 |     fn set_bypassed(&mut self, bypassed: bool);
[INFO] [stdout] 16 |     fn get_gain_reduction(&self) -> f32 { 0.0 }
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `magnitude_at` is never used
[INFO] [stdout]    --> src/audio/effects/eq.rs:105:8
[INFO] [stdout]     |
[INFO] [stdout]  17 | impl Biquad {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 105 |     fn magnitude_at(&self, freq: f32, sample_rate: u32) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_eq_response` is never used
[INFO] [stdout]    --> src/audio/effects/eq.rs:232:8
[INFO] [stdout]     |
[INFO] [stdout] 232 | pub fn compute_eq_response(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `sample_rate` and `buffer` are never read
[INFO] [stdout]   --> src/audio/effects/reverb.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub struct Reverb {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     sample_rate: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 11 |     buffer: VecDeque<f32>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `transport`, `sample_rate`, and `buffer_size` are never read
[INFO] [stdout]   --> src/audio/engine.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct AudioEngine {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     transport: Transport,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 18 |     sample_rate: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 19 |     buffer_size: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/audio/engine.rs:55:12
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl AudioEngine {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  55 |     pub fn playback(&self) -> Option<&PlaybackManager> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn stop(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn stop_input(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn is_running(&self) -> bool { self.is_running.load(Ordering::SeqCst) }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 149 |     pub fn sample_rate(&self) -> u32 { self.sample_rate }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 150 |     pub fn buffer_size(&self) -> u32 { self.buffer_size }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 151 |     pub fn transport(&self) -> &Transport { &self.transport }
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 152 |     pub fn transport_mut(&mut self) -> &mut Transport { &mut self.transport }
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WavMetadata` is never constructed
[INFO] [stdout]  --> src/audio/loader.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct WavMetadata {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_wav_metadata` is never used
[INFO] [stdout]   --> src/audio/loader.rs:12:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub fn load_wav_metadata(path: &Path) -> Result<WavMetadata, String> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_wav` is never used
[INFO] [stdout]   --> src/audio/loader.rs:64:8
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub fn write_wav(path: &Path, samples: &[f32], channels: u16, sample_rate: u32) -> Result<(), String> {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ChannelStrip` is never constructed
[INFO] [stdout]  --> src/audio/mixer.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct ChannelStrip {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `process`, `channels`, and `update_meters` are never used
[INFO] [stdout]   --> src/audio/mixer.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ChannelStrip {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub fn process(&mut self, buffer: &mut AudioBuffer) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     fn channels(&self) -> usize { 2 }
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 42 |
[INFO] [stdout] 43 |     fn update_meters(&mut self, buffer: &AudioBuffer) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Mixer` is never constructed
[INFO] [stdout]   --> src/audio/mixer.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct Mixer {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/audio/mixer.rs:70:12
[INFO] [stdout]     |
[INFO] [stdout]  69 | impl Mixer {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout]  70 |     pub fn new(num_channels: usize, sample_rate: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn set_num_channels(&mut self, num_channels: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn num_channels(&self) -> usize { self.channels.len() }
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout]  80 |
[INFO] [stdout]  81 |     pub fn get_channel(&self, index: usize) -> Option<&ChannelStrip> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn get_channel_mut(&mut self, index: usize) -> Option<&mut ChannelStrip> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn get_master(&self) -> &ChannelStrip { &self.master }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout]  90 |     pub fn get_master_mut(&mut self) -> &mut ChannelStrip { &mut self.master }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout]  91 |
[INFO] [stdout]  92 |     pub fn process(&mut self, buffers: &mut [&mut AudioBuffer]) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn mix_to_stereo(&mut self, buffers: &[AudioBuffer]) -> AudioBuffer {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn set_sample_rate(&mut self, sample_rate: u32) { self.sample_rate = sample_rate; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 133 |     pub fn add_channel(&mut self) { self.channels.push(ChannelStrip::new()); }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 134 |     pub fn remove_channel(&mut self, index: usize) { if index < self.channels.len() { self.channels.remove(index); } }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `pitch_shift` is never read
[INFO] [stdout]   --> src/audio/playback.rs:26:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct PlaybackClip {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub pitch_shift: Option<PitchShiftParams>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PlaybackClip` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `armed` is never read
[INFO] [stdout]   --> src/audio/playback.rs:44:9
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct PlaybackTrack {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub armed: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PlaybackTrack` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `name` is never read
[INFO] [stdout]   --> src/audio/playback.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct PlaybackBus {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 52 |     pub id: Uuid,
[INFO] [stdout] 53 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PlaybackBus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/audio/playback.rs:147:12
[INFO] [stdout]     |
[INFO] [stdout] 146 | impl PlaybackManager {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 147 |     pub fn new(sample_rate: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn has_recording(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub fn start_recording(&self, armed_ids: &HashSet<Uuid>, position: u64, sample_rate: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn stop_recording(&self) -> Option<(HashMap<Uuid, Vec<f32>>, u64)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 187 |     pub fn is_recording(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn set_armed(&self, track_id: Uuid, armed: bool) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     pub fn set_input_monitoring(&self, track_id: Uuid, enabled: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 212 |     pub fn state(&self) -> &Arc<Mutex<PlaybackState>> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn set_playing(&self, playing: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn is_playing(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn set_position(&self, position: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub fn get_position(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub fn get_track_peaks(&self) -> HashMap<Uuid, (f32, f32)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn get_bus_peaks(&self) -> HashMap<Uuid, (f32, f32)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn get_master_peak(&self) -> (f32, f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn update_master_params(&self, volume: f32, pan: f32, mute: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 256 |     pub fn get_compressor_gr(&self, target_id: Uuid, is_track: bool, effect_index: usize) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn set_loop(&self, enabled: bool, start: u64, end: u64) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 276 |     pub fn set_loop_enabled(&self, enabled: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn is_loop_enabled(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     pub fn update_track_params(&self, track_id: Uuid, volume: f32, pan: f32, mute: bool, solo: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn update_bus_params(&self, bus_id: Uuid, volume: f32, pan: f32, mute: bool, solo: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 310 |     pub fn update_track_effect_param(&self, track_id: Uuid, effect_index: usize, param_name: &str, value: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub fn update_bus_effect_param(&self, bus_id: Uuid, effect_index: usize, param_name: &str, value: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub fn set_track_effect_bypass(&self, track_id: Uuid, effect_index: usize, bypass: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 340 |     pub fn set_bus_effect_bypass(&self, bus_id: Uuid, effect_index: usize, bypass: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 350 |     pub fn reload_track_effects(&self, track_id: Uuid, instances: &[EffectInstance], sample_rate: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 356 |     pub fn reload_bus_effects(&self, bus_id: Uuid, instances: &[EffectInstance], sample_rate: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FileOrigin` is never used
[INFO] [stdout]  --> src/audio/pool.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum FileOrigin {
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AudioFileInfo` is never constructed
[INFO] [stdout]   --> src/audio/pool.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct AudioFileInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sync` is never used
[INFO] [stdout]   --> src/audio/pool.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn sync(project: &Project) -> Vec<AudioFileInfo> {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `record_start_pos` and `armed_track_ids` are never read
[INFO] [stdout]  --> src/audio/record.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct RecordState {
[INFO] [stdout]   |            ----------- fields in this struct
[INFO] [stdout] 5 |     pub recording: bool,
[INFO] [stdout] 6 |     pub record_start_pos: u64,
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 7 |     pub armed_track_ids: HashSet<Uuid>,
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `start`, `stop`, and `get_record_start_pos` are never used
[INFO] [stdout]   --> src/audio/record.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl RecordState {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn start(&mut self, armed_ids: &HashSet<Uuid>, position: u64, sample_rate: u32) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn stop(&mut self) -> (HashMap<Uuid, Vec<f32>>, u64) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn get_record_start_pos(&self) -> u64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Playing`, `Paused`, and `Recording` are never constructed
[INFO] [stdout]  --> src/audio/transport.rs:2:36
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub enum TransportState { Stopped, Playing, Paused, Recording }
[INFO] [stdout]   |          --------------            ^^^^^^^  ^^^^^^  ^^^^^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `TransportState` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/audio/transport.rs:6:5
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub struct Transport {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout]  6 |     state: TransportState,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]  7 |     position_samples: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]  8 |     loop_enabled: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]  9 |     loop_start: u64,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 10 |     loop_end: u64,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 11 |     bpm: f64,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 12 |     time_signature_numerator: u8,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 13 |     time_signature_denominator: u8,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Transport` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> src/audio/transport.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl Transport {
[INFO] [stdout]    | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn play(&mut self) { self.state = TransportState::Playing; }
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 26 |     pub fn pause(&mut self) { self.state = TransportState::Paused; }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 27 |     pub fn stop(&mut self) { self.state = TransportState::Stopped; self.position_samples = 0; }
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 28 |     pub fn set_position_samples(&mut self, position: u64) { self.position_samples = position; }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 29 |     pub fn get_position_samples(&self) -> u64 { self.position_samples }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 30 |     pub fn get_state(&self) -> TransportState { self.state }
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 31 |     pub fn is_playing(&self) -> bool { self.state == TransportState::Playing }
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 32 |     pub fn is_recording(&self) -> bool { self.state == TransportState::Recording }
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 33 |     pub fn is_paused(&self) -> bool { self.state == TransportState::Paused }
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 34 |     pub fn is_stopped(&self) -> bool { self.state == TransportState::Stopped }
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 35 |
[INFO] [stdout] 36 |     pub fn advance_position(&mut self, frames: u64) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn set_loop(&mut self, enabled: bool, start: u64, end: u64) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn is_loop_enabled(&self) -> bool { self.loop_enabled }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 54 |
[INFO] [stdout] 55 |     pub fn set_bpm(&mut self, bpm: f64) { self.bpm = bpm.clamp(20.0, 999.0); }
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 56 |     pub fn get_bpm(&self) -> f64 { self.bpm }
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 57 |
[INFO] [stdout] 58 |     pub fn set_time_signature(&mut self, numerator: u8, denominator: u8) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn get_time_signature(&self) -> (u8, u8) { (self.time_signature_numerator, self.time_signature_denominator) }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 62 |
[INFO] [stdout] 63 |     pub fn samples_to_beats(&self, samples: u64, sample_rate: u32) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn beats_to_samples(&self, beats: f64, sample_rate: u32) -> u64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn samples_to_time_string(&self, samples: u64, sample_rate: u32) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 83 |     pub fn samples_to_bars_beats_ticks(&self, samples: u64, sample_rate: u32) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_point` and `remove_point_at` are never used
[INFO] [stdout]   --> src/project/automation.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | impl AutomationLane {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn add_point(&mut self, time: f64, value: f32) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub fn remove_point_at(&mut self, time: f64, tolerance: f64) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `end_position`, `overlaps`, `set_trim`, `move_by`, and `source_path_buf` are never used
[INFO] [stdout]   --> src/project/clip.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | impl AudioClip {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 48 |     pub fn new(source_path: String, name: String, position: u64, length: u64) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn end_position(&self) -> u64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn overlaps(&self, start: u64, end: u64) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn set_trim(&mut self, new_offset: u64, new_length: u64) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn move_by(&mut self, delta: i64) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn source_path_buf(&self) -> PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SnapMode` is never used
[INFO] [stdout]  --> src/project/editing.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum SnapMode {
[INFO] [stdout]   |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BeatDivision` is never used
[INFO] [stdout]   --> src/project/editing.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum BeatDivision {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Fps` is never used
[INFO] [stdout]   --> src/project/editing.rs:21:10
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub enum Fps {
[INFO] [stdout]    |          ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `ticks_per_beat` is never used
[INFO] [stdout]   --> src/project/editing.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl BeatDivision {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] 30 |     pub fn ticks_per_beat(&self) -> u64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `snap_to_grid` is never used
[INFO] [stdout]   --> src/project/editing.rs:42:8
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub fn snap_to_grid(position: u64, bpm: f64, sample_rate: u32, mode: &SnapMode, relative_offset: u64, preserve_offset: bool) -> u64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `split_clip` is never used
[INFO] [stdout]   --> src/project/editing.rs:78:8
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub fn split_clip(clip: &AudioClip, split_position: u64) -> Option<(AudioClip, AudioClip)> {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MIN_STRETCH_RATIO` is never used
[INFO] [stdout]    --> src/project/editing.rs:120:11
[INFO] [stdout]     |
[INFO] [stdout] 120 | pub const MIN_STRETCH_RATIO: f32 = 0.25;
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_STRETCH_RATIO` is never used
[INFO] [stdout]    --> src/project/editing.rs:121:11
[INFO] [stdout]     |
[INFO] [stdout] 121 | pub const MAX_STRETCH_RATIO: f32 = 4.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clamp_stretch_ratio` is never used
[INFO] [stdout]    --> src/project/editing.rs:123:8
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub fn clamp_stretch_ratio(ratio: f32) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_time_stretch_params` is never used
[INFO] [stdout]    --> src/project/editing.rs:127:8
[INFO] [stdout]     |
[INFO] [stdout] 127 | pub fn create_time_stretch_params(ratio: f32) -> TimeStretchParams {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_auto_crossfade` is never used
[INFO] [stdout]    --> src/project/editing.rs:140:8
[INFO] [stdout]     |
[INFO] [stdout] 140 | pub fn create_auto_crossfade(clip_a: &mut AudioClip, clip_b: &mut AudioClip) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clear_crossfade` is never used
[INFO] [stdout]    --> src/project/editing.rs:155:8
[INFO] [stdout]     |
[INFO] [stdout] 155 | pub fn clear_crossfade(clip_a: &mut AudioClip, clip_b: &mut AudioClip) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clips_overlap` is never used
[INFO] [stdout]    --> src/project/editing.rs:160:8
[INFO] [stdout]     |
[INFO] [stdout] 160 | pub fn clips_overlap(a: &AudioClip, b: &AudioClip) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `IoError` is never used
[INFO] [stdout]  --> src/project/io.rs:7:10
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum IoError {
[INFO] [stdout]   |          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_project` is never used
[INFO] [stdout]   --> src/project/io.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn save_project(project: &Project, path: &Path) -> Result<(), IoError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_project` is never used
[INFO] [stdout]   --> src/project/io.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn load_project(path: &Path) -> Result<Project, IoError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_project_pretty` is never used
[INFO] [stdout]   --> src/project/io.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn save_project_pretty(project: &Project, path: &Path) -> Result<(), IoError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/project/track.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl AuxSend {
[INFO] [stdout]    | ------------ associated function in this implementation
[INFO] [stdout] 37 |     pub fn new(target_id: Uuid) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_clip`, `remove_clip`, and `get_clips_in_range` are never used
[INFO] [stdout]   --> src/project/track.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | impl Track {
[INFO] [stdout]    | ---------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn add_clip(&mut self, clip: AudioClip) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn remove_clip(&mut self, clip_id: Uuid) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn get_clips_in_range(&self, start: u64, end: u64) -> Vec<&AudioClip> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `In` and `Out` are never constructed
[INFO] [stdout]   --> src/project/undo.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub enum FadeEdge {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] 14 |     In,
[INFO] [stdout]    |     ^^
[INFO] [stdout] 15 |     Out,
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FadeEdge` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CoalesceKey` is never used
[INFO] [stdout]   --> src/project/undo.rs:19:10
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub enum CoalesceKey {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]    --> src/project/undo.rs:31:5
[INFO] [stdout]     |
[INFO] [stdout]  30 | pub enum EditCommand {
[INFO] [stdout]     |          ----------- variants in this enum
[INFO] [stdout]  31 |     MoveClip {
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  37 |     MoveClipToTrack {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  42 |     ResizeClip {
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     SplitClip {
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  55 |     DeleteClips {
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  59 |     ChangeVolume {
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  64 |     ChangePan {
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     ChangeBusVolume {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  74 |     ChangeBusPan {
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     ChangeMasterVolume {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     ChangeMasterPan {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     ToggleMasterMute,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]  88 |     ChangeTrackOutput {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     ChangeBusOutput {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     AddSend {
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     RemoveSend {
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     SetFade {
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     TimeStretch {
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     AddTrack {
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     RemoveTrack {
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     RemoveBus {
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     AddClip {
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     RemoveClip {
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     AddEffect {
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     RemoveEffect {
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     ChangeEffectParam {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     MoveEffect {
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     ToggleEffectBypass {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     AddAutomationPoint {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     RemoveAutomationPoint {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     MoveAutomationPoint {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `EditCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `coalesce_key` is never used
[INFO] [stdout]    --> src/project/undo.rs:196:12
[INFO] [stdout]     |
[INFO] [stdout] 195 | impl EditCommand {
[INFO] [stdout]     | ---------------- method in this implementation
[INFO] [stdout] 196 |     pub fn coalesce_key(&self) -> Option<CoalesceKey> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_track_mut` is never used
[INFO] [stdout]    --> src/project/undo.rs:216:4
[INFO] [stdout]     |
[INFO] [stdout] 216 | fn find_track_mut(project: &mut Project, track_id: Uuid) -> Option<&mut Track> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_bus_mut` is never used
[INFO] [stdout]    --> src/project/undo.rs:220:4
[INFO] [stdout]     |
[INFO] [stdout] 220 | fn find_bus_mut(project: &mut Project, bus_id: Uuid) -> Option<&mut Bus> {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_effects_chain_mut` is never used
[INFO] [stdout]    --> src/project/undo.rs:224:4
[INFO] [stdout]     |
[INFO] [stdout] 224 | fn get_effects_chain_mut<'a>(project: &'a mut Project, target_id: Uuid, is_track: bool) -> Option<&'a mut Vec<EffectInstance>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `execute_command` is never used
[INFO] [stdout]    --> src/project/undo.rs:232:8
[INFO] [stdout]     |
[INFO] [stdout] 232 | pub fn execute_command(project: &mut Project, cmd: &EditCommand) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `undo_command` is never used
[INFO] [stdout]    --> src/project/undo.rs:408:8
[INFO] [stdout]     |
[INFO] [stdout] 408 | pub fn undo_command(project: &mut Project, cmd: &EditCommand) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `commands` and `cursor` are never read
[INFO] [stdout]    --> src/project/undo.rs:589:5
[INFO] [stdout]     |
[INFO] [stdout] 588 | pub struct UndoStack {
[INFO] [stdout]     |            --------- fields in this struct
[INFO] [stdout] 589 |     commands: Vec<EditCommand>,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 590 |     cursor: usize,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `UndoStack` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `clear`, `push`, `undo`, `redo`, `can_undo`, and `can_redo` are never used
[INFO] [stdout]    --> src/project/undo.rs:601:12
[INFO] [stdout]     |
[INFO] [stdout] 593 | impl UndoStack {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 601 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 606 |     pub fn push(&mut self, cmd: EditCommand) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 628 |     pub fn undo(&mut self, project: &mut Project) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 641 |     pub fn redo(&mut self, project: &mut Project) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 654 |     pub fn can_undo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 658 |     pub fn can_redo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_audio_formats` is never used
[INFO] [stdout]  --> src/utils/mod.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub fn get_audio_formats() -> Vec<&'static str> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_audio_file` is never used
[INFO] [stdout]   --> src/utils/mod.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub fn is_audio_file(path: &Path) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_time` is never used
[INFO] [stdout]   --> src/utils/mod.rs:18:8
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub fn format_time(seconds: f64) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `db_to_linear` is never used
[INFO] [stdout]   --> src/utils/mod.rs:25:8
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub fn db_to_linear(db: f32) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `linear_to_db` is never used
[INFO] [stdout]   --> src/utils/mod.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn linear_to_db(linear: f32) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min`, `max`, and `samples_per_peak` are never read
[INFO] [stdout]  --> src/utils/waveform.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct WaveformPeaks {
[INFO] [stdout]   |            ------------- fields in this struct
[INFO] [stdout] 6 |     pub min: Vec<f32>,
[INFO] [stdout]   |         ^^^
[INFO] [stdout] 7 |     pub max: Vec<f32>,
[INFO] [stdout]   |         ^^^
[INFO] [stdout] 8 |     pub samples_per_peak: usize,
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `WaveformPeaks` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_peak` and `num_peaks` are never used
[INFO] [stdout]   --> src/utils/waveform.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl WaveformPeaks {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn get_peak(&self, index: usize) -> (f32, f32) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn num_peaks(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_waveform_cache` is never used
[INFO] [stdout]   --> src/utils/waveform.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn generate_waveform_cache(buffer: &AudioBuffer, width: usize) -> WaveformPeaks {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_waveform_data_url` is never used
[INFO] [stdout]   --> src/utils/waveform.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn render_waveform_data_url(peaks: &WaveformPeaks, width: u32, height: u32) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TimeStretchProcessor` is never constructed
[INFO] [stdout]  --> src/utils/timestretch.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct TimeStretchProcessor {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `stretch`, and `stretch_to_duration` are never used
[INFO] [stdout]   --> src/utils/timestretch.rs:9:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl TimeStretchProcessor {
[INFO] [stdout]    | ------------------------- associated items in this implementation
[INFO] [stdout]  9 |     pub fn new(sample_rate: u32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 13 |     pub fn stretch(&self, buffer: &AudioBuffer, ratio: f32) -> Result<AudioBuffer, String> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn stretch_to_duration(&self, buffer: &AudioBuffer, target_samples: usize) -> Result<AudioBuffer, String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pitch_shift` is never used
[INFO] [stdout]   --> src/utils/timestretch.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn pitch_shift(_semitones: f32) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `dev` profile [unoptimized + debuginfo] target(s) in 1m 48s
[INFO] running `Command { std: "docker" "inspect" "82a61f854d6d64e7ecf2280c68df240783350511354e8636c3ffb64ac095525c", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "82a61f854d6d64e7ecf2280c68df240783350511354e8636c3ffb64ac095525c", kill_on_drop: false }`
[INFO] [stdout] 82a61f854d6d64e7ecf2280c68df240783350511354e8636c3ffb64ac095525c
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "test" "--frozen" "--no-run" "--message-format=json", kill_on_drop: false }`
[INFO] [stdout] 06e8ceb24a4b0b8724453006a37b637e2da442794bfcfaecaf812807ccff363f
[INFO] running `Command { std: "docker" "start" "-a" "06e8ceb24a4b0b8724453006a37b637e2da442794bfcfaecaf812807ccff363f", kill_on_drop: false }`
[INFO] [stderr]    Compiling hdaw v0.1.0 (/opt/rustwide/workdir)
[INFO] [stdout] warning: unused import: `crate::audio::effects::Effect`
[INFO] [stdout]  --> src/project/track.rs:1:5
[INFO] [stdout]   |
[INFO] [stdout] 1 | use crate::audio::effects::Effect;
[INFO] [stdout]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/app/mod.rs:17:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct HdawApp {
[INFO] [stdout]    |            ------- fields in this struct
[INFO] [stdout] 17 |     pub project: Arc<Mutex<Project>>,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout] 18 |     pub undo_stack: Arc<Mutex<UndoStack>>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 19 |     pub audio_engine: Arc<Mutex<AudioEngine>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 20 |     pub playback: PlaybackManager,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 21 |     pub selected_clips: Arc<Mutex<HashSet<Uuid>>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 22 |     pub clipboard: Arc<Mutex<Vec<AudioClip>>>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 23 |     pub waveform_peaks: Arc<Mutex<HashMap<String, WaveformPeaks>>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 24 |     pub selected_track_id: Arc<Mutex<Option<Uuid>>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 25 |     pub selected_bus_id: Arc<Mutex<Option<Uuid>>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 26 |     pub drag_state: Arc<Mutex<Option<drag::DragState>>>,
[INFO] [stdout]    |         ^^^^^^^^^^
[INFO] [stdout] 27 |     pub automation_drag: Arc<Mutex<Option<drag::AutomationDragState>>>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `playback` is never used
[INFO] [stdout]   --> src/app/mod.rs:85:12
[INFO] [stdout]    |
[INFO] [stdout] 30 | impl HdawApp {
[INFO] [stdout]    | ------------ method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 85 |     pub fn playback(&self) -> PlaybackManager {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/app/drag.rs:6:9
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub(crate) struct DragState {
[INFO] [stdout]    |                   --------- fields in this struct
[INFO] [stdout]  6 |     pub clip_id: Uuid,
[INFO] [stdout]    |         ^^^^^^^
[INFO] [stdout]  7 |     pub track_id: Uuid,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout]  8 |     pub track_index: i32,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]  9 |     pub original_pos: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 10 |     pub original_length: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 11 |     pub original_fade_in: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 12 |     pub original_fade_out: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 13 |     pub click_offset: u64,
[INFO] [stdout]    |         ^^^^^^^^^^^^
[INFO] [stdout] 14 |     pub drag_edge: Option<DragEdge>,
[INFO] [stdout]    |         ^^^^^^^^^
[INFO] [stdout] 15 |     pub destination_track_id: Option<Uuid>,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DragState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Left`, `Right`, `Stretch`, `FadeIn`, and `FadeOut` are never constructed
[INFO] [stdout]   --> src/app/drag.rs:19:28
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub(crate) enum DragEdge { Left, Right, Stretch, FadeIn, FadeOut }
[INFO] [stdout]    |                 --------   ^^^^  ^^^^^  ^^^^^^^  ^^^^^^  ^^^^^^^
[INFO] [stdout]    |                 |
[INFO] [stdout]    |                 variants in this enum
[INFO] [stdout]    |
[INFO] [stdout]    = note: `DragEdge` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `track_id`, `parameter_name`, `point_index`, `original_point`, `click_offset_time`, and `click_offset_value` are never read
[INFO] [stdout]   --> src/app/drag.rs:23:9
[INFO] [stdout]    |
[INFO] [stdout] 22 | pub(crate) struct AutomationDragState {
[INFO] [stdout]    |                   ------------------- fields in this struct
[INFO] [stdout] 23 |     pub track_id: Uuid,
[INFO] [stdout]    |         ^^^^^^^^
[INFO] [stdout] 24 |     pub parameter_name: String,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 25 |     pub point_index: usize,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout] 26 |     pub original_point: AutomationPoint,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^
[INFO] [stdout] 27 |     pub click_offset_time: f64,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 28 |     pub click_offset_value: f32,
[INFO] [stdout]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `AutomationDragState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `rebuild_waveform_cache` is never used
[INFO] [stdout]  --> src/app/io.rs:6:15
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub(crate) fn rebuild_waveform_cache(
[INFO] [stdout]   |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]   --> src/audio/buffer.rs:13:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl AudioBuffer {
[INFO] [stdout]    | ---------------- associated items in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 13 |     pub fn with_capacity(channels: u16, sample_rate: u32, capacity: usize) -> Self {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn len(&self) -> usize { self.samples.len() }
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 22 |     pub fn is_empty(&self) -> bool { self.samples.is_empty() }
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] 23 |     pub fn frames(&self) -> usize { if self.channels > 0 { self.samples.len() / self.channels as usize } else { 0 } }
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 24 |     pub fn duration_secs(&self) -> f64 { self.frames() as f64 / self.sample_rate as f64 }
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 25 |     pub fn clear(&mut self) { self.samples.clear(); }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 26 |     pub fn resize(&mut self, new_len: usize, value: f32) { self.samples.resize(new_len, value); }
[INFO] [stdout]    |            ^^^^^^
[INFO] [stdout] 27 |     pub fn push_sample(&mut self, sample: f32) { self.samples.push(sample); }
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 30 |     pub fn get_frame(&self, frame: usize) -> Option<Vec<f32>> {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 37 |     pub fn fill_silence(&mut self) {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     pub fn mix(&mut self, other: &AudioBuffer, volume: f32) {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 48 |     pub fn apply_gain(&mut self, gain: f32) {
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 52 |     pub fn apply_pan(&mut self, pan: f32) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_name`, `is_bypassed`, and `get_gain_reduction` are never used
[INFO] [stdout]   --> src/audio/effects/mod.rs:13:8
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub trait Effect: Send + Sync {
[INFO] [stdout]    |           ------ methods in this trait
[INFO] [stdout] ...
[INFO] [stdout] 13 |     fn get_name(&self) -> &str;
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 14 |     fn is_bypassed(&self) -> bool;
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 15 |     fn set_bypassed(&mut self, bypassed: bool);
[INFO] [stdout] 16 |     fn get_gain_reduction(&self) -> f32 { 0.0 }
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `magnitude_at` is never used
[INFO] [stdout]    --> src/audio/effects/eq.rs:105:8
[INFO] [stdout]     |
[INFO] [stdout]  17 | impl Biquad {
[INFO] [stdout]     | ----------- method in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 105 |     fn magnitude_at(&self, freq: f32, sample_rate: u32) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `compute_eq_response` is never used
[INFO] [stdout]    --> src/audio/effects/eq.rs:232:8
[INFO] [stdout]     |
[INFO] [stdout] 232 | pub fn compute_eq_response(
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `sample_rate` and `buffer` are never read
[INFO] [stdout]   --> src/audio/effects/reverb.rs:10:5
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub struct Reverb {
[INFO] [stdout]    |            ------ fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 10 |     sample_rate: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 11 |     buffer: VecDeque<f32>,
[INFO] [stdout]    |     ^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `transport`, `sample_rate`, and `buffer_size` are never read
[INFO] [stdout]   --> src/audio/engine.rs:15:5
[INFO] [stdout]    |
[INFO] [stdout]  9 | pub struct AudioEngine {
[INFO] [stdout]    |            ----------- fields in this struct
[INFO] [stdout] ...
[INFO] [stdout] 15 |     transport: Transport,
[INFO] [stdout]    |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 18 |     sample_rate: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 19 |     buffer_size: u32,
[INFO] [stdout]    |     ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]    --> src/audio/engine.rs:55:12
[INFO] [stdout]     |
[INFO] [stdout]  22 | impl AudioEngine {
[INFO] [stdout]     | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout]  55 |     pub fn playback(&self) -> Option<&PlaybackManager> {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 129 |     pub fn stop(&mut self) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 141 |     pub fn stop_input(&mut self) {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 148 |     pub fn is_running(&self) -> bool { self.is_running.load(Ordering::SeqCst) }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] 149 |     pub fn sample_rate(&self) -> u32 { self.sample_rate }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 150 |     pub fn buffer_size(&self) -> u32 { self.buffer_size }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 151 |     pub fn transport(&self) -> &Transport { &self.transport }
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] 152 |     pub fn transport_mut(&mut self) -> &mut Transport { &mut self.transport }
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `WavMetadata` is never constructed
[INFO] [stdout]  --> src/audio/loader.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct WavMetadata {
[INFO] [stdout]   |            ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_wav_metadata` is never used
[INFO] [stdout]   --> src/audio/loader.rs:12:8
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub fn load_wav_metadata(path: &Path) -> Result<WavMetadata, String> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `write_wav` is never used
[INFO] [stdout]   --> src/audio/loader.rs:64:8
[INFO] [stdout]    |
[INFO] [stdout] 64 | pub fn write_wav(path: &Path, samples: &[f32], channels: u16, sample_rate: u32) -> Result<(), String> {
[INFO] [stdout]    |        ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `ChannelStrip` is never constructed
[INFO] [stdout]  --> src/audio/mixer.rs:5:12
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct ChannelStrip {
[INFO] [stdout]   |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `process`, `channels`, and `update_meters` are never used
[INFO] [stdout]   --> src/audio/mixer.rs:15:12
[INFO] [stdout]    |
[INFO] [stdout] 14 | impl ChannelStrip {
[INFO] [stdout]    | ----------------- associated items in this implementation
[INFO] [stdout] 15 |     pub fn new() -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub fn process(&mut self, buffer: &mut AudioBuffer) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 41 |     fn channels(&self) -> usize { 2 }
[INFO] [stdout]    |        ^^^^^^^^
[INFO] [stdout] 42 |
[INFO] [stdout] 43 |     fn update_meters(&mut self, buffer: &AudioBuffer) {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `Mixer` is never constructed
[INFO] [stdout]   --> src/audio/mixer.rs:63:12
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub struct Mixer {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/audio/mixer.rs:70:12
[INFO] [stdout]     |
[INFO] [stdout]  69 | impl Mixer {
[INFO] [stdout]     | ---------- associated items in this implementation
[INFO] [stdout]  70 |     pub fn new(num_channels: usize, sample_rate: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout]  75 |     pub fn set_num_channels(&mut self, num_channels: usize) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     pub fn num_channels(&self) -> usize { self.channels.len() }
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout]  80 |
[INFO] [stdout]  81 |     pub fn get_channel(&self, index: usize) -> Option<&ChannelStrip> {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  85 |     pub fn get_channel_mut(&mut self, index: usize) -> Option<&mut ChannelStrip> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  89 |     pub fn get_master(&self) -> &ChannelStrip { &self.master }
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout]  90 |     pub fn get_master_mut(&mut self) -> &mut ChannelStrip { &mut self.master }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout]  91 |
[INFO] [stdout]  92 |     pub fn process(&mut self, buffers: &mut [&mut AudioBuffer]) {
[INFO] [stdout]     |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 109 |     pub fn mix_to_stereo(&mut self, buffers: &[AudioBuffer]) -> AudioBuffer {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 132 |     pub fn set_sample_rate(&mut self, sample_rate: u32) { self.sample_rate = sample_rate; }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 133 |     pub fn add_channel(&mut self) { self.channels.push(ChannelStrip::new()); }
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] 134 |     pub fn remove_channel(&mut self, index: usize) { if index < self.channels.len() { self.channels.remove(index); } }
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `pitch_shift` is never read
[INFO] [stdout]   --> src/audio/playback.rs:26:9
[INFO] [stdout]    |
[INFO] [stdout] 16 | pub struct PlaybackClip {
[INFO] [stdout]    |            ------------ field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 26 |     pub pitch_shift: Option<PitchShiftParams>,
[INFO] [stdout]    |         ^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PlaybackClip` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `armed` is never read
[INFO] [stdout]   --> src/audio/playback.rs:44:9
[INFO] [stdout]    |
[INFO] [stdout] 38 | pub struct PlaybackTrack {
[INFO] [stdout]    |            ------------- field in this struct
[INFO] [stdout] ...
[INFO] [stdout] 44 |     pub armed: bool,
[INFO] [stdout]    |         ^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PlaybackTrack` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: field `name` is never read
[INFO] [stdout]   --> src/audio/playback.rs:53:9
[INFO] [stdout]    |
[INFO] [stdout] 51 | pub struct PlaybackBus {
[INFO] [stdout]    |            ----------- field in this struct
[INFO] [stdout] 52 |     pub id: Uuid,
[INFO] [stdout] 53 |     pub name: String,
[INFO] [stdout]    |         ^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `PlaybackBus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple associated items are never used
[INFO] [stdout]    --> src/audio/playback.rs:147:12
[INFO] [stdout]     |
[INFO] [stdout] 146 | impl PlaybackManager {
[INFO] [stdout]     | -------------------- associated items in this implementation
[INFO] [stdout] 147 |     pub fn new(sample_rate: u32) -> Self {
[INFO] [stdout]     |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 165 |     pub fn has_recording(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 169 |     pub fn start_recording(&self, armed_ids: &HashSet<Uuid>, position: u64, sample_rate: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     pub fn stop_recording(&self) -> Option<(HashMap<Uuid, Vec<f32>>, u64)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 187 |     pub fn is_recording(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 191 |     pub fn set_armed(&self, track_id: Uuid, armed: bool) {
[INFO] [stdout]     |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 204 |     pub fn set_input_monitoring(&self, track_id: Uuid, enabled: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 212 |     pub fn state(&self) -> &Arc<Mutex<PlaybackState>> {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 216 |     pub fn set_playing(&self, playing: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 222 |     pub fn is_playing(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 226 |     pub fn set_position(&self, position: u64) {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 232 |     pub fn get_position(&self) -> u64 {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 236 |     pub fn get_track_peaks(&self) -> HashMap<Uuid, (f32, f32)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 240 |     pub fn get_bus_peaks(&self) -> HashMap<Uuid, (f32, f32)> {
[INFO] [stdout]     |            ^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 244 |     pub fn get_master_peak(&self) -> (f32, f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 248 |     pub fn update_master_params(&self, volume: f32, pan: f32, mute: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 256 |     pub fn get_compressor_gr(&self, target_id: Uuid, is_track: bool, effect_index: usize) -> f32 {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 268 |     pub fn set_loop(&self, enabled: bool, start: u64, end: u64) {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 276 |     pub fn set_loop_enabled(&self, enabled: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 282 |     pub fn is_loop_enabled(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 286 |     pub fn update_track_params(&self, track_id: Uuid, volume: f32, pan: f32, mute: bool, solo: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 297 |     pub fn update_bus_params(&self, bus_id: Uuid, volume: f32, pan: f32, mute: bool, solo: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 310 |     pub fn update_track_effect_param(&self, track_id: Uuid, effect_index: usize, param_name: &str, value: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 320 |     pub fn update_bus_effect_param(&self, bus_id: Uuid, effect_index: usize, param_name: &str, value: f32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 330 |     pub fn set_track_effect_bypass(&self, track_id: Uuid, effect_index: usize, bypass: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 340 |     pub fn set_bus_effect_bypass(&self, bus_id: Uuid, effect_index: usize, bypass: bool) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 350 |     pub fn reload_track_effects(&self, track_id: Uuid, instances: &[EffectInstance], sample_rate: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 356 |     pub fn reload_bus_effects(&self, bus_id: Uuid, instances: &[EffectInstance], sample_rate: u32) {
[INFO] [stdout]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `FileOrigin` is never used
[INFO] [stdout]  --> src/audio/pool.rs:6:10
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub enum FileOrigin {
[INFO] [stdout]   |          ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `AudioFileInfo` is never constructed
[INFO] [stdout]   --> src/audio/pool.rs:12:12
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub struct AudioFileInfo {
[INFO] [stdout]    |            ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `sync` is never used
[INFO] [stdout]   --> src/audio/pool.rs:24:8
[INFO] [stdout]    |
[INFO] [stdout] 24 | pub fn sync(project: &Project) -> Vec<AudioFileInfo> {
[INFO] [stdout]    |        ^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `record_start_pos` and `armed_track_ids` are never read
[INFO] [stdout]  --> src/audio/record.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct RecordState {
[INFO] [stdout]   |            ----------- fields in this struct
[INFO] [stdout] 5 |     pub recording: bool,
[INFO] [stdout] 6 |     pub record_start_pos: u64,
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^
[INFO] [stdout] 7 |     pub armed_track_ids: HashSet<Uuid>,
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `start`, `stop`, and `get_record_start_pos` are never used
[INFO] [stdout]   --> src/audio/record.rs:21:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl RecordState {
[INFO] [stdout]    | ---------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 21 |     pub fn start(&mut self, armed_ids: &HashSet<Uuid>, position: u64, sample_rate: u32) {
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 34 |     pub fn stop(&mut self) -> (HashMap<Uuid, Vec<f32>>, u64) {
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn get_record_start_pos(&self) -> u64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `Playing`, `Paused`, and `Recording` are never constructed
[INFO] [stdout]  --> src/audio/transport.rs:2:36
[INFO] [stdout]   |
[INFO] [stdout] 2 | pub enum TransportState { Stopped, Playing, Paused, Recording }
[INFO] [stdout]   |          --------------            ^^^^^^^  ^^^^^^  ^^^^^^^^^
[INFO] [stdout]   |          |
[INFO] [stdout]   |          variants in this enum
[INFO] [stdout]   |
[INFO] [stdout]   = note: `TransportState` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple fields are never read
[INFO] [stdout]   --> src/audio/transport.rs:6:5
[INFO] [stdout]    |
[INFO] [stdout]  5 | pub struct Transport {
[INFO] [stdout]    |            --------- fields in this struct
[INFO] [stdout]  6 |     state: TransportState,
[INFO] [stdout]    |     ^^^^^
[INFO] [stdout]  7 |     position_samples: u64,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]  8 |     loop_enabled: bool,
[INFO] [stdout]    |     ^^^^^^^^^^^^
[INFO] [stdout]  9 |     loop_start: u64,
[INFO] [stdout]    |     ^^^^^^^^^^
[INFO] [stdout] 10 |     loop_end: u64,
[INFO] [stdout]    |     ^^^^^^^^
[INFO] [stdout] 11 |     bpm: f64,
[INFO] [stdout]    |     ^^^
[INFO] [stdout] 12 |     time_signature_numerator: u8,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 13 |     time_signature_denominator: u8,
[INFO] [stdout]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `Transport` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple methods are never used
[INFO] [stdout]   --> src/audio/transport.rs:25:12
[INFO] [stdout]    |
[INFO] [stdout] 16 | impl Transport {
[INFO] [stdout]    | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 25 |     pub fn play(&mut self) { self.state = TransportState::Playing; }
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 26 |     pub fn pause(&mut self) { self.state = TransportState::Paused; }
[INFO] [stdout]    |            ^^^^^
[INFO] [stdout] 27 |     pub fn stop(&mut self) { self.state = TransportState::Stopped; self.position_samples = 0; }
[INFO] [stdout]    |            ^^^^
[INFO] [stdout] 28 |     pub fn set_position_samples(&mut self, position: u64) { self.position_samples = position; }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 29 |     pub fn get_position_samples(&self) -> u64 { self.position_samples }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 30 |     pub fn get_state(&self) -> TransportState { self.state }
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 31 |     pub fn is_playing(&self) -> bool { self.state == TransportState::Playing }
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 32 |     pub fn is_recording(&self) -> bool { self.state == TransportState::Recording }
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] 33 |     pub fn is_paused(&self) -> bool { self.state == TransportState::Paused }
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 34 |     pub fn is_stopped(&self) -> bool { self.state == TransportState::Stopped }
[INFO] [stdout]    |            ^^^^^^^^^^
[INFO] [stdout] 35 |
[INFO] [stdout] 36 |     pub fn advance_position(&mut self, frames: u64) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 50 |     pub fn set_loop(&mut self, enabled: bool, start: u64, end: u64) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 53 |     pub fn is_loop_enabled(&self) -> bool { self.loop_enabled }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 54 |
[INFO] [stdout] 55 |     pub fn set_bpm(&mut self, bpm: f64) { self.bpm = bpm.clamp(20.0, 999.0); }
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 56 |     pub fn get_bpm(&self) -> f64 { self.bpm }
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] 57 |
[INFO] [stdout] 58 |     pub fn set_time_signature(&mut self, numerator: u8, denominator: u8) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 61 |     pub fn get_time_signature(&self) -> (u8, u8) { (self.time_signature_numerator, self.time_signature_denominator) }
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 62 |
[INFO] [stdout] 63 |     pub fn samples_to_beats(&self, samples: u64, sample_rate: u32) -> f64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn beats_to_samples(&self, beats: f64, sample_rate: u32) -> u64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 75 |     pub fn samples_to_time_string(&self, samples: u64, sample_rate: u32) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 83 |     pub fn samples_to_bars_beats_ticks(&self, samples: u64, sample_rate: u32) -> String {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_point` and `remove_point_at` are never used
[INFO] [stdout]   --> src/project/automation.rs:47:12
[INFO] [stdout]    |
[INFO] [stdout] 35 | impl AutomationLane {
[INFO] [stdout]    | ------------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 47 |     pub fn add_point(&mut self, time: f64, value: f32) {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 56 |     pub fn remove_point_at(&mut self, time: f64, tolerance: f64) {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `end_position`, `overlaps`, `set_trim`, `move_by`, and `source_path_buf` are never used
[INFO] [stdout]   --> src/project/clip.rs:48:12
[INFO] [stdout]    |
[INFO] [stdout] 47 | impl AudioClip {
[INFO] [stdout]    | -------------- associated items in this implementation
[INFO] [stdout] 48 |     pub fn new(source_path: String, name: String, position: u64, length: u64) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 65 |     pub fn end_position(&self) -> u64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 69 |     pub fn overlaps(&self, start: u64, end: u64) -> bool {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 73 |     pub fn set_trim(&mut self, new_offset: u64, new_length: u64) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 78 |     pub fn move_by(&mut self, delta: i64) {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn source_path_buf(&self) -> PathBuf {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `SnapMode` is never used
[INFO] [stdout]  --> src/project/editing.rs:4:10
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub enum SnapMode {
[INFO] [stdout]   |          ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `BeatDivision` is never used
[INFO] [stdout]   --> src/project/editing.rs:12:10
[INFO] [stdout]    |
[INFO] [stdout] 12 | pub enum BeatDivision {
[INFO] [stdout]    |          ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `Fps` is never used
[INFO] [stdout]   --> src/project/editing.rs:21:10
[INFO] [stdout]    |
[INFO] [stdout] 21 | pub enum Fps {
[INFO] [stdout]    |          ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `ticks_per_beat` is never used
[INFO] [stdout]   --> src/project/editing.rs:30:12
[INFO] [stdout]    |
[INFO] [stdout] 29 | impl BeatDivision {
[INFO] [stdout]    | ----------------- method in this implementation
[INFO] [stdout] 30 |     pub fn ticks_per_beat(&self) -> u64 {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `snap_to_grid` is never used
[INFO] [stdout]   --> src/project/editing.rs:42:8
[INFO] [stdout]    |
[INFO] [stdout] 42 | pub fn snap_to_grid(position: u64, bpm: f64, sample_rate: u32, mode: &SnapMode, relative_offset: u64, preserve_offset: bool) -> u64 {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `split_clip` is never used
[INFO] [stdout]   --> src/project/editing.rs:78:8
[INFO] [stdout]    |
[INFO] [stdout] 78 | pub fn split_clip(clip: &AudioClip, split_position: u64) -> Option<(AudioClip, AudioClip)> {
[INFO] [stdout]    |        ^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MIN_STRETCH_RATIO` is never used
[INFO] [stdout]    --> src/project/editing.rs:120:11
[INFO] [stdout]     |
[INFO] [stdout] 120 | pub const MIN_STRETCH_RATIO: f32 = 0.25;
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: constant `MAX_STRETCH_RATIO` is never used
[INFO] [stdout]    --> src/project/editing.rs:121:11
[INFO] [stdout]     |
[INFO] [stdout] 121 | pub const MAX_STRETCH_RATIO: f32 = 4.0;
[INFO] [stdout]     |           ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clamp_stretch_ratio` is never used
[INFO] [stdout]    --> src/project/editing.rs:123:8
[INFO] [stdout]     |
[INFO] [stdout] 123 | pub fn clamp_stretch_ratio(ratio: f32) -> f32 {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_time_stretch_params` is never used
[INFO] [stdout]    --> src/project/editing.rs:127:8
[INFO] [stdout]     |
[INFO] [stdout] 127 | pub fn create_time_stretch_params(ratio: f32) -> TimeStretchParams {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `create_auto_crossfade` is never used
[INFO] [stdout]    --> src/project/editing.rs:140:8
[INFO] [stdout]     |
[INFO] [stdout] 140 | pub fn create_auto_crossfade(clip_a: &mut AudioClip, clip_b: &mut AudioClip) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clear_crossfade` is never used
[INFO] [stdout]    --> src/project/editing.rs:155:8
[INFO] [stdout]     |
[INFO] [stdout] 155 | pub fn clear_crossfade(clip_a: &mut AudioClip, clip_b: &mut AudioClip) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `clips_overlap` is never used
[INFO] [stdout]    --> src/project/editing.rs:160:8
[INFO] [stdout]     |
[INFO] [stdout] 160 | pub fn clips_overlap(a: &AudioClip, b: &AudioClip) -> bool {
[INFO] [stdout]     |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `IoError` is never used
[INFO] [stdout]  --> src/project/io.rs:7:10
[INFO] [stdout]   |
[INFO] [stdout] 7 | pub enum IoError {
[INFO] [stdout]   |          ^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_project` is never used
[INFO] [stdout]   --> src/project/io.rs:26:8
[INFO] [stdout]    |
[INFO] [stdout] 26 | pub fn save_project(project: &Project, path: &Path) -> Result<(), IoError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `load_project` is never used
[INFO] [stdout]   --> src/project/io.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn load_project(path: &Path) -> Result<Project, IoError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `save_project_pretty` is never used
[INFO] [stdout]   --> src/project/io.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn save_project_pretty(project: &Project, path: &Path) -> Result<(), IoError> {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated function `new` is never used
[INFO] [stdout]   --> src/project/track.rs:37:12
[INFO] [stdout]    |
[INFO] [stdout] 36 | impl AuxSend {
[INFO] [stdout]    | ------------ associated function in this implementation
[INFO] [stdout] 37 |     pub fn new(target_id: Uuid) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `add_clip`, `remove_clip`, and `get_clips_in_range` are never used
[INFO] [stdout]   --> src/project/track.rs:77:12
[INFO] [stdout]    |
[INFO] [stdout] 56 | impl Track {
[INFO] [stdout]    | ---------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 77 |     pub fn add_clip(&mut self, clip: AudioClip) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 82 |     pub fn remove_clip(&mut self, clip_id: Uuid) {
[INFO] [stdout]    |            ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 86 |     pub fn get_clips_in_range(&self, start: u64, end: u64) -> Vec<&AudioClip> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: variants `In` and `Out` are never constructed
[INFO] [stdout]   --> src/project/undo.rs:14:5
[INFO] [stdout]    |
[INFO] [stdout] 13 | pub enum FadeEdge {
[INFO] [stdout]    |          -------- variants in this enum
[INFO] [stdout] 14 |     In,
[INFO] [stdout]    |     ^^
[INFO] [stdout] 15 |     Out,
[INFO] [stdout]    |     ^^^
[INFO] [stdout]    |
[INFO] [stdout]    = note: `FadeEdge` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: enum `CoalesceKey` is never used
[INFO] [stdout]   --> src/project/undo.rs:19:10
[INFO] [stdout]    |
[INFO] [stdout] 19 | pub enum CoalesceKey {
[INFO] [stdout]    |          ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: multiple variants are never constructed
[INFO] [stdout]    --> src/project/undo.rs:31:5
[INFO] [stdout]     |
[INFO] [stdout]  30 | pub enum EditCommand {
[INFO] [stdout]     |          ----------- variants in this enum
[INFO] [stdout]  31 |     MoveClip {
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  37 |     MoveClipToTrack {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  42 |     ResizeClip {
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  50 |     SplitClip {
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  55 |     DeleteClips {
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  59 |     ChangeVolume {
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  64 |     ChangePan {
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  69 |     ChangeBusVolume {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  74 |     ChangeBusPan {
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  79 |     ChangeMasterVolume {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  83 |     ChangeMasterPan {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  87 |     ToggleMasterMute,
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^
[INFO] [stdout]  88 |     ChangeTrackOutput {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  93 |     ChangeBusOutput {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout]  98 |     AddSend {
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 103 |     RemoveSend {
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 108 |     SetFade {
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 115 |     TimeStretch {
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 123 |     AddTrack {
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 127 |     RemoveTrack {
[INFO] [stdout]     |     ^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 131 |     RemoveBus {
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 135 |     AddClip {
[INFO] [stdout]     |     ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 139 |     RemoveClip {
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 144 |     AddEffect {
[INFO] [stdout]     |     ^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 150 |     RemoveEffect {
[INFO] [stdout]     |     ^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 156 |     ChangeEffectParam {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 164 |     MoveEffect {
[INFO] [stdout]     |     ^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 170 |     ToggleEffectBypass {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 175 |     AddAutomationPoint {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 180 |     RemoveAutomationPoint {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 186 |     MoveAutomationPoint {
[INFO] [stdout]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `EditCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: method `coalesce_key` is never used
[INFO] [stdout]    --> src/project/undo.rs:196:12
[INFO] [stdout]     |
[INFO] [stdout] 195 | impl EditCommand {
[INFO] [stdout]     | ---------------- method in this implementation
[INFO] [stdout] 196 |     pub fn coalesce_key(&self) -> Option<CoalesceKey> {
[INFO] [stdout]     |            ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_track_mut` is never used
[INFO] [stdout]    --> src/project/undo.rs:216:4
[INFO] [stdout]     |
[INFO] [stdout] 216 | fn find_track_mut(project: &mut Project, track_id: Uuid) -> Option<&mut Track> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `find_bus_mut` is never used
[INFO] [stdout]    --> src/project/undo.rs:220:4
[INFO] [stdout]     |
[INFO] [stdout] 220 | fn find_bus_mut(project: &mut Project, bus_id: Uuid) -> Option<&mut Bus> {
[INFO] [stdout]     |    ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_effects_chain_mut` is never used
[INFO] [stdout]    --> src/project/undo.rs:224:4
[INFO] [stdout]     |
[INFO] [stdout] 224 | fn get_effects_chain_mut<'a>(project: &'a mut Project, target_id: Uuid, is_track: bool) -> Option<&'a mut Vec<EffectInstance>> {
[INFO] [stdout]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `execute_command` is never used
[INFO] [stdout]    --> src/project/undo.rs:232:8
[INFO] [stdout]     |
[INFO] [stdout] 232 | pub fn execute_command(project: &mut Project, cmd: &EditCommand) {
[INFO] [stdout]     |        ^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `undo_command` is never used
[INFO] [stdout]    --> src/project/undo.rs:408:8
[INFO] [stdout]     |
[INFO] [stdout] 408 | pub fn undo_command(project: &mut Project, cmd: &EditCommand) {
[INFO] [stdout]     |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `commands` and `cursor` are never read
[INFO] [stdout]    --> src/project/undo.rs:589:5
[INFO] [stdout]     |
[INFO] [stdout] 588 | pub struct UndoStack {
[INFO] [stdout]     |            --------- fields in this struct
[INFO] [stdout] 589 |     commands: Vec<EditCommand>,
[INFO] [stdout]     |     ^^^^^^^^
[INFO] [stdout] 590 |     cursor: usize,
[INFO] [stdout]     |     ^^^^^^
[INFO] [stdout]     |
[INFO] [stdout]     = note: `UndoStack` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `clear`, `push`, `undo`, `redo`, `can_undo`, and `can_redo` are never used
[INFO] [stdout]    --> src/project/undo.rs:601:12
[INFO] [stdout]     |
[INFO] [stdout] 593 | impl UndoStack {
[INFO] [stdout]     | -------------- methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 601 |     pub fn clear(&mut self) {
[INFO] [stdout]     |            ^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 606 |     pub fn push(&mut self, cmd: EditCommand) {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 628 |     pub fn undo(&mut self, project: &mut Project) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 641 |     pub fn redo(&mut self, project: &mut Project) -> bool {
[INFO] [stdout]     |            ^^^^
[INFO] [stdout] ...
[INFO] [stdout] 654 |     pub fn can_undo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 658 |     pub fn can_redo(&self) -> bool {
[INFO] [stdout]     |            ^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `get_audio_formats` is never used
[INFO] [stdout]  --> src/utils/mod.rs:6:8
[INFO] [stdout]   |
[INFO] [stdout] 6 | pub fn get_audio_formats() -> Vec<&'static str> {
[INFO] [stdout]   |        ^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `is_audio_file` is never used
[INFO] [stdout]   --> src/utils/mod.rs:10:8
[INFO] [stdout]    |
[INFO] [stdout] 10 | pub fn is_audio_file(path: &Path) -> bool {
[INFO] [stdout]    |        ^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `format_time` is never used
[INFO] [stdout]   --> src/utils/mod.rs:18:8
[INFO] [stdout]    |
[INFO] [stdout] 18 | pub fn format_time(seconds: f64) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `db_to_linear` is never used
[INFO] [stdout]   --> src/utils/mod.rs:25:8
[INFO] [stdout]    |
[INFO] [stdout] 25 | pub fn db_to_linear(db: f32) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `linear_to_db` is never used
[INFO] [stdout]   --> src/utils/mod.rs:33:8
[INFO] [stdout]    |
[INFO] [stdout] 33 | pub fn linear_to_db(linear: f32) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: fields `min`, `max`, and `samples_per_peak` are never read
[INFO] [stdout]  --> src/utils/waveform.rs:6:9
[INFO] [stdout]   |
[INFO] [stdout] 5 | pub struct WaveformPeaks {
[INFO] [stdout]   |            ------------- fields in this struct
[INFO] [stdout] 6 |     pub min: Vec<f32>,
[INFO] [stdout]   |         ^^^
[INFO] [stdout] 7 |     pub max: Vec<f32>,
[INFO] [stdout]   |         ^^^
[INFO] [stdout] 8 |     pub samples_per_peak: usize,
[INFO] [stdout]   |         ^^^^^^^^^^^^^^^^
[INFO] [stdout]   |
[INFO] [stdout]   = note: `WaveformPeaks` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: methods `get_peak` and `num_peaks` are never used
[INFO] [stdout]   --> src/utils/waveform.rs:46:12
[INFO] [stdout]    |
[INFO] [stdout] 11 | impl WaveformPeaks {
[INFO] [stdout]    | ------------------ methods in this implementation
[INFO] [stdout] ...
[INFO] [stdout] 46 |     pub fn get_peak(&self, index: usize) -> (f32, f32) {
[INFO] [stdout]    |            ^^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 54 |     pub fn num_peaks(&self) -> usize {
[INFO] [stdout]    |            ^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `generate_waveform_cache` is never used
[INFO] [stdout]   --> src/utils/waveform.rs:59:8
[INFO] [stdout]    |
[INFO] [stdout] 59 | pub fn generate_waveform_cache(buffer: &AudioBuffer, width: usize) -> WaveformPeaks {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `render_waveform_data_url` is never used
[INFO] [stdout]   --> src/utils/waveform.rs:63:8
[INFO] [stdout]    |
[INFO] [stdout] 63 | pub fn render_waveform_data_url(peaks: &WaveformPeaks, width: u32, height: u32) -> String {
[INFO] [stdout]    |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: struct `TimeStretchProcessor` is never constructed
[INFO] [stdout]  --> src/utils/timestretch.rs:4:12
[INFO] [stdout]   |
[INFO] [stdout] 4 | pub struct TimeStretchProcessor {
[INFO] [stdout]   |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: associated items `new`, `stretch`, and `stretch_to_duration` are never used
[INFO] [stdout]   --> src/utils/timestretch.rs:9:12
[INFO] [stdout]    |
[INFO] [stdout]  8 | impl TimeStretchProcessor {
[INFO] [stdout]    | ------------------------- associated items in this implementation
[INFO] [stdout]  9 |     pub fn new(sample_rate: u32) -> Self {
[INFO] [stdout]    |            ^^^
[INFO] [stdout] ...
[INFO] [stdout] 13 |     pub fn stretch(&self, buffer: &AudioBuffer, ratio: f32) -> Result<AudioBuffer, String> {
[INFO] [stdout]    |            ^^^^^^^
[INFO] [stdout] ...
[INFO] [stdout] 29 |     pub fn stretch_to_duration(&self, buffer: &AudioBuffer, target_samples: usize) -> Result<AudioBuffer, String> {
[INFO] [stdout]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stdout] warning: function `pitch_shift` is never used
[INFO] [stdout]   --> src/utils/timestretch.rs:40:8
[INFO] [stdout]    |
[INFO] [stdout] 40 | pub fn pitch_shift(_semitones: f32) -> f32 {
[INFO] [stdout]    |        ^^^^^^^^^^^
[INFO] [stdout] 
[INFO] [stdout] 
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 2.18s
[INFO] running `Command { std: "docker" "inspect" "06e8ceb24a4b0b8724453006a37b637e2da442794bfcfaecaf812807ccff363f", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "06e8ceb24a4b0b8724453006a37b637e2da442794bfcfaecaf812807ccff363f", kill_on_drop: false }`
[INFO] [stdout] 06e8ceb24a4b0b8724453006a37b637e2da442794bfcfaecaf812807ccff363f
[INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-6-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+cced03bfd61a304243a34504618ecec86c17063f" "test" "--frozen", kill_on_drop: false }`
[INFO] [stdout] 238b8921da4d2613c94dbd5941e46d1f285971e86ea72379ff1f460400a02589
[INFO] running `Command { std: "docker" "start" "-a" "238b8921da4d2613c94dbd5941e46d1f285971e86ea72379ff1f460400a02589", kill_on_drop: false }`
[INFO] [stderr] warning: unused import: `crate::audio::effects::Effect`
[INFO] [stderr]  --> src/project/track.rs:1:5
[INFO] [stderr]   |
[INFO] [stderr] 1 | use crate::audio::effects::Effect;
[INFO] [stderr]   |     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `#[warn(unused_imports)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: multiple fields are never read
[INFO] [stderr]   --> src/app/mod.rs:17:9
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct HdawApp {
[INFO] [stderr]    |            ------- fields in this struct
[INFO] [stderr] 17 |     pub project: Arc<Mutex<Project>>,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr] 18 |     pub undo_stack: Arc<Mutex<UndoStack>>,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr] 19 |     pub audio_engine: Arc<Mutex<AudioEngine>>,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr] 20 |     pub playback: PlaybackManager,
[INFO] [stderr]    |         ^^^^^^^^
[INFO] [stderr] 21 |     pub selected_clips: Arc<Mutex<HashSet<Uuid>>>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^
[INFO] [stderr] 22 |     pub clipboard: Arc<Mutex<Vec<AudioClip>>>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] 23 |     pub waveform_peaks: Arc<Mutex<HashMap<String, WaveformPeaks>>>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^
[INFO] [stderr] 24 |     pub selected_track_id: Arc<Mutex<Option<Uuid>>>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 25 |     pub selected_bus_id: Arc<Mutex<Option<Uuid>>>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^
[INFO] [stderr] 26 |     pub drag_state: Arc<Mutex<Option<drag::DragState>>>,
[INFO] [stderr]    |         ^^^^^^^^^^
[INFO] [stderr] 27 |     pub automation_drag: Arc<Mutex<Option<drag::AutomationDragState>>>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `#[warn(dead_code)]` (part of `#[warn(unused)]`) on by default
[INFO] [stderr] 
[INFO] [stderr] warning: method `playback` is never used
[INFO] [stderr]   --> src/app/mod.rs:85:12
[INFO] [stderr]    |
[INFO] [stderr] 30 | impl HdawApp {
[INFO] [stderr]    | ------------ method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 85 |     pub fn playback(&self) -> PlaybackManager {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple fields are never read
[INFO] [stderr]   --> src/app/drag.rs:6:9
[INFO] [stderr]    |
[INFO] [stderr]  5 | pub(crate) struct DragState {
[INFO] [stderr]    |                   --------- fields in this struct
[INFO] [stderr]  6 |     pub clip_id: Uuid,
[INFO] [stderr]    |         ^^^^^^^
[INFO] [stderr]  7 |     pub track_id: Uuid,
[INFO] [stderr]    |         ^^^^^^^^
[INFO] [stderr]  8 |     pub track_index: i32,
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr]  9 |     pub original_pos: u64,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr] 10 |     pub original_length: u64,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^
[INFO] [stderr] 11 |     pub original_fade_in: u64,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^
[INFO] [stderr] 12 |     pub original_fade_out: u64,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 13 |     pub click_offset: u64,
[INFO] [stderr]    |         ^^^^^^^^^^^^
[INFO] [stderr] 14 |     pub drag_edge: Option<DragEdge>,
[INFO] [stderr]    |         ^^^^^^^^^
[INFO] [stderr] 15 |     pub destination_track_id: Option<Uuid>,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DragState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Left`, `Right`, `Stretch`, `FadeIn`, and `FadeOut` are never constructed
[INFO] [stderr]   --> src/app/drag.rs:19:28
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub(crate) enum DragEdge { Left, Right, Stretch, FadeIn, FadeOut }
[INFO] [stderr]    |                 --------   ^^^^  ^^^^^  ^^^^^^^  ^^^^^^  ^^^^^^^
[INFO] [stderr]    |                 |
[INFO] [stderr]    |                 variants in this enum
[INFO] [stderr]    |
[INFO] [stderr]    = note: `DragEdge` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: fields `track_id`, `parameter_name`, `point_index`, `original_point`, `click_offset_time`, and `click_offset_value` are never read
[INFO] [stderr]   --> src/app/drag.rs:23:9
[INFO] [stderr]    |
[INFO] [stderr] 22 | pub(crate) struct AutomationDragState {
[INFO] [stderr]    |                   ------------------- fields in this struct
[INFO] [stderr] 23 |     pub track_id: Uuid,
[INFO] [stderr]    |         ^^^^^^^^
[INFO] [stderr] 24 |     pub parameter_name: String,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^
[INFO] [stderr] 25 |     pub point_index: usize,
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr] 26 |     pub original_point: AutomationPoint,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^
[INFO] [stderr] 27 |     pub click_offset_time: f64,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 28 |     pub click_offset_value: f32,
[INFO] [stderr]    |         ^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `AutomationDragState` has a derived impl for the trait `Clone`, but this is intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: function `rebuild_waveform_cache` is never used
[INFO] [stderr]  --> src/app/io.rs:6:15
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub(crate) fn rebuild_waveform_cache(
[INFO] [stderr]   |               ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]   --> src/audio/buffer.rs:13:12
[INFO] [stderr]    |
[INFO] [stderr]  8 | impl AudioBuffer {
[INFO] [stderr]    | ---------------- associated items in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 13 |     pub fn with_capacity(channels: u16, sample_rate: u32, capacity: usize) -> Self {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 21 |     pub fn len(&self) -> usize { self.samples.len() }
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 22 |     pub fn is_empty(&self) -> bool { self.samples.is_empty() }
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] 23 |     pub fn frames(&self) -> usize { if self.channels > 0 { self.samples.len() / self.channels as usize } else { 0 } }
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 24 |     pub fn duration_secs(&self) -> f64 { self.frames() as f64 / self.sample_rate as f64 }
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 25 |     pub fn clear(&mut self) { self.samples.clear(); }
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] 26 |     pub fn resize(&mut self, new_len: usize, value: f32) { self.samples.resize(new_len, value); }
[INFO] [stderr]    |            ^^^^^^
[INFO] [stderr] 27 |     pub fn push_sample(&mut self, sample: f32) { self.samples.push(sample); }
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 30 |     pub fn get_frame(&self, frame: usize) -> Option<Vec<f32>> {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 37 |     pub fn fill_silence(&mut self) {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 41 |     pub fn mix(&mut self, other: &AudioBuffer, volume: f32) {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 48 |     pub fn apply_gain(&mut self, gain: f32) {
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 52 |     pub fn apply_pan(&mut self, pan: f32) {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_name`, `is_bypassed`, and `get_gain_reduction` are never used
[INFO] [stderr]   --> src/audio/effects/mod.rs:13:8
[INFO] [stderr]    |
[INFO] [stderr]  9 | pub trait Effect: Send + Sync {
[INFO] [stderr]    |           ------ methods in this trait
[INFO] [stderr] ...
[INFO] [stderr] 13 |     fn get_name(&self) -> &str;
[INFO] [stderr]    |        ^^^^^^^^
[INFO] [stderr] 14 |     fn is_bypassed(&self) -> bool;
[INFO] [stderr]    |        ^^^^^^^^^^^
[INFO] [stderr] 15 |     fn set_bypassed(&mut self, bypassed: bool);
[INFO] [stderr] 16 |     fn get_gain_reduction(&self) -> f32 { 0.0 }
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `magnitude_at` is never used
[INFO] [stderr]    --> src/audio/effects/eq.rs:105:8
[INFO] [stderr]     |
[INFO] [stderr]  17 | impl Biquad {
[INFO] [stderr]     | ----------- method in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 105 |     fn magnitude_at(&self, freq: f32, sample_rate: u32) -> f32 {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `compute_eq_response` is never used
[INFO] [stderr]    --> src/audio/effects/eq.rs:232:8
[INFO] [stderr]     |
[INFO] [stderr] 232 | pub fn compute_eq_response(
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `sample_rate` and `buffer` are never read
[INFO] [stderr]   --> src/audio/effects/reverb.rs:10:5
[INFO] [stderr]    |
[INFO] [stderr]  5 | pub struct Reverb {
[INFO] [stderr]    |            ------ fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 10 |     sample_rate: u32,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 11 |     buffer: VecDeque<f32>,
[INFO] [stderr]    |     ^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `transport`, `sample_rate`, and `buffer_size` are never read
[INFO] [stderr]   --> src/audio/engine.rs:15:5
[INFO] [stderr]    |
[INFO] [stderr]  9 | pub struct AudioEngine {
[INFO] [stderr]    |            ----------- fields in this struct
[INFO] [stderr] ...
[INFO] [stderr] 15 |     transport: Transport,
[INFO] [stderr]    |     ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 18 |     sample_rate: u32,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 19 |     buffer_size: u32,
[INFO] [stderr]    |     ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]    --> src/audio/engine.rs:55:12
[INFO] [stderr]     |
[INFO] [stderr]  22 | impl AudioEngine {
[INFO] [stderr]     | ---------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr]  55 |     pub fn playback(&self) -> Option<&PlaybackManager> {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 129 |     pub fn stop(&mut self) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 141 |     pub fn stop_input(&mut self) {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 148 |     pub fn is_running(&self) -> bool { self.is_running.load(Ordering::SeqCst) }
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] 149 |     pub fn sample_rate(&self) -> u32 { self.sample_rate }
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 150 |     pub fn buffer_size(&self) -> u32 { self.buffer_size }
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 151 |     pub fn transport(&self) -> &Transport { &self.transport }
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] 152 |     pub fn transport_mut(&mut self) -> &mut Transport { &mut self.transport }
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `WavMetadata` is never constructed
[INFO] [stderr]  --> src/audio/loader.rs:5:12
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub struct WavMetadata {
[INFO] [stderr]   |            ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `load_wav_metadata` is never used
[INFO] [stderr]   --> src/audio/loader.rs:12:8
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub fn load_wav_metadata(path: &Path) -> Result<WavMetadata, String> {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `write_wav` is never used
[INFO] [stderr]   --> src/audio/loader.rs:64:8
[INFO] [stderr]    |
[INFO] [stderr] 64 | pub fn write_wav(path: &Path, samples: &[f32], channels: u16, sample_rate: u32) -> Result<(), String> {
[INFO] [stderr]    |        ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `ChannelStrip` is never constructed
[INFO] [stderr]  --> src/audio/mixer.rs:5:12
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub struct ChannelStrip {
[INFO] [stderr]   |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `process`, `channels`, and `update_meters` are never used
[INFO] [stderr]   --> src/audio/mixer.rs:15:12
[INFO] [stderr]    |
[INFO] [stderr] 14 | impl ChannelStrip {
[INFO] [stderr]    | ----------------- associated items in this implementation
[INFO] [stderr] 15 |     pub fn new() -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 26 |     pub fn process(&mut self, buffer: &mut AudioBuffer) {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 41 |     fn channels(&self) -> usize { 2 }
[INFO] [stderr]    |        ^^^^^^^^
[INFO] [stderr] 42 |
[INFO] [stderr] 43 |     fn update_meters(&mut self, buffer: &AudioBuffer) {
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `Mixer` is never constructed
[INFO] [stderr]   --> src/audio/mixer.rs:63:12
[INFO] [stderr]    |
[INFO] [stderr] 63 | pub struct Mixer {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/audio/mixer.rs:70:12
[INFO] [stderr]     |
[INFO] [stderr]  69 | impl Mixer {
[INFO] [stderr]     | ---------- associated items in this implementation
[INFO] [stderr]  70 |     pub fn new(num_channels: usize, sample_rate: u32) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr]  75 |     pub fn set_num_channels(&mut self, num_channels: usize) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  79 |     pub fn num_channels(&self) -> usize { self.channels.len() }
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr]  80 |
[INFO] [stderr]  81 |     pub fn get_channel(&self, index: usize) -> Option<&ChannelStrip> {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  85 |     pub fn get_channel_mut(&mut self, index: usize) -> Option<&mut ChannelStrip> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  89 |     pub fn get_master(&self) -> &ChannelStrip { &self.master }
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr]  90 |     pub fn get_master_mut(&mut self) -> &mut ChannelStrip { &mut self.master }
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr]  91 |
[INFO] [stderr]  92 |     pub fn process(&mut self, buffers: &mut [&mut AudioBuffer]) {
[INFO] [stderr]     |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 109 |     pub fn mix_to_stereo(&mut self, buffers: &[AudioBuffer]) -> AudioBuffer {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 132 |     pub fn set_sample_rate(&mut self, sample_rate: u32) { self.sample_rate = sample_rate; }
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 133 |     pub fn add_channel(&mut self) { self.channels.push(ChannelStrip::new()); }
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] 134 |     pub fn remove_channel(&mut self, index: usize) { if index < self.channels.len() { self.channels.remove(index); } }
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: field `pitch_shift` is never read
[INFO] [stderr]   --> src/audio/playback.rs:26:9
[INFO] [stderr]    |
[INFO] [stderr] 16 | pub struct PlaybackClip {
[INFO] [stderr]    |            ------------ field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 26 |     pub pitch_shift: Option<PitchShiftParams>,
[INFO] [stderr]    |         ^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `PlaybackClip` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `armed` is never read
[INFO] [stderr]   --> src/audio/playback.rs:44:9
[INFO] [stderr]    |
[INFO] [stderr] 38 | pub struct PlaybackTrack {
[INFO] [stderr]    |            ------------- field in this struct
[INFO] [stderr] ...
[INFO] [stderr] 44 |     pub armed: bool,
[INFO] [stderr]    |         ^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `PlaybackTrack` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: field `name` is never read
[INFO] [stderr]   --> src/audio/playback.rs:53:9
[INFO] [stderr]    |
[INFO] [stderr] 51 | pub struct PlaybackBus {
[INFO] [stderr]    |            ----------- field in this struct
[INFO] [stderr] 52 |     pub id: Uuid,
[INFO] [stderr] 53 |     pub name: String,
[INFO] [stderr]    |         ^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `PlaybackBus` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: multiple associated items are never used
[INFO] [stderr]    --> src/audio/playback.rs:147:12
[INFO] [stderr]     |
[INFO] [stderr] 146 | impl PlaybackManager {
[INFO] [stderr]     | -------------------- associated items in this implementation
[INFO] [stderr] 147 |     pub fn new(sample_rate: u32) -> Self {
[INFO] [stderr]     |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 165 |     pub fn has_recording(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 169 |     pub fn start_recording(&self, armed_ids: &HashSet<Uuid>, position: u64, sample_rate: u32) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 175 |     pub fn stop_recording(&self) -> Option<(HashMap<Uuid, Vec<f32>>, u64)> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 187 |     pub fn is_recording(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 191 |     pub fn set_armed(&self, track_id: Uuid, armed: bool) {
[INFO] [stderr]     |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 204 |     pub fn set_input_monitoring(&self, track_id: Uuid, enabled: bool) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 212 |     pub fn state(&self) -> &Arc<Mutex<PlaybackState>> {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 216 |     pub fn set_playing(&self, playing: bool) {
[INFO] [stderr]     |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 222 |     pub fn is_playing(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 226 |     pub fn set_position(&self, position: u64) {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 232 |     pub fn get_position(&self) -> u64 {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 236 |     pub fn get_track_peaks(&self) -> HashMap<Uuid, (f32, f32)> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 240 |     pub fn get_bus_peaks(&self) -> HashMap<Uuid, (f32, f32)> {
[INFO] [stderr]     |            ^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 244 |     pub fn get_master_peak(&self) -> (f32, f32) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 248 |     pub fn update_master_params(&self, volume: f32, pan: f32, mute: bool) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 256 |     pub fn get_compressor_gr(&self, target_id: Uuid, is_track: bool, effect_index: usize) -> f32 {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 268 |     pub fn set_loop(&self, enabled: bool, start: u64, end: u64) {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 276 |     pub fn set_loop_enabled(&self, enabled: bool) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 282 |     pub fn is_loop_enabled(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 286 |     pub fn update_track_params(&self, track_id: Uuid, volume: f32, pan: f32, mute: bool, solo: bool) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 297 |     pub fn update_bus_params(&self, bus_id: Uuid, volume: f32, pan: f32, mute: bool, solo: bool) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 310 |     pub fn update_track_effect_param(&self, track_id: Uuid, effect_index: usize, param_name: &str, value: f32) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 320 |     pub fn update_bus_effect_param(&self, bus_id: Uuid, effect_index: usize, param_name: &str, value: f32) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 330 |     pub fn set_track_effect_bypass(&self, track_id: Uuid, effect_index: usize, bypass: bool) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 340 |     pub fn set_bus_effect_bypass(&self, bus_id: Uuid, effect_index: usize, bypass: bool) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 350 |     pub fn reload_track_effects(&self, track_id: Uuid, instances: &[EffectInstance], sample_rate: u32) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 356 |     pub fn reload_bus_effects(&self, bus_id: Uuid, instances: &[EffectInstance], sample_rate: u32) {
[INFO] [stderr]     |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `FileOrigin` is never used
[INFO] [stderr]  --> src/audio/pool.rs:6:10
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub enum FileOrigin {
[INFO] [stderr]   |          ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `AudioFileInfo` is never constructed
[INFO] [stderr]   --> src/audio/pool.rs:12:12
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub struct AudioFileInfo {
[INFO] [stderr]    |            ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `sync` is never used
[INFO] [stderr]   --> src/audio/pool.rs:24:8
[INFO] [stderr]    |
[INFO] [stderr] 24 | pub fn sync(project: &Project) -> Vec<AudioFileInfo> {
[INFO] [stderr]    |        ^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `record_start_pos` and `armed_track_ids` are never read
[INFO] [stderr]  --> src/audio/record.rs:6:9
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub struct RecordState {
[INFO] [stderr]   |            ----------- fields in this struct
[INFO] [stderr] 5 |     pub recording: bool,
[INFO] [stderr] 6 |     pub record_start_pos: u64,
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^
[INFO] [stderr] 7 |     pub armed_track_ids: HashSet<Uuid>,
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `start`, `stop`, and `get_record_start_pos` are never used
[INFO] [stderr]   --> src/audio/record.rs:21:12
[INFO] [stderr]    |
[INFO] [stderr] 11 | impl RecordState {
[INFO] [stderr]    | ---------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 21 |     pub fn start(&mut self, armed_ids: &HashSet<Uuid>, position: u64, sample_rate: u32) {
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 34 |     pub fn stop(&mut self) -> (HashMap<Uuid, Vec<f32>>, u64) {
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 46 |     pub fn get_record_start_pos(&self) -> u64 {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variants `Playing`, `Paused`, and `Recording` are never constructed
[INFO] [stderr]  --> src/audio/transport.rs:2:36
[INFO] [stderr]   |
[INFO] [stderr] 2 | pub enum TransportState { Stopped, Playing, Paused, Recording }
[INFO] [stderr]   |          --------------            ^^^^^^^  ^^^^^^  ^^^^^^^^^
[INFO] [stderr]   |          |
[INFO] [stderr]   |          variants in this enum
[INFO] [stderr]   |
[INFO] [stderr]   = note: `TransportState` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: multiple fields are never read
[INFO] [stderr]   --> src/audio/transport.rs:6:5
[INFO] [stderr]    |
[INFO] [stderr]  5 | pub struct Transport {
[INFO] [stderr]    |            --------- fields in this struct
[INFO] [stderr]  6 |     state: TransportState,
[INFO] [stderr]    |     ^^^^^
[INFO] [stderr]  7 |     position_samples: u64,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^
[INFO] [stderr]  8 |     loop_enabled: bool,
[INFO] [stderr]    |     ^^^^^^^^^^^^
[INFO] [stderr]  9 |     loop_start: u64,
[INFO] [stderr]    |     ^^^^^^^^^^
[INFO] [stderr] 10 |     loop_end: u64,
[INFO] [stderr]    |     ^^^^^^^^
[INFO] [stderr] 11 |     bpm: f64,
[INFO] [stderr]    |     ^^^
[INFO] [stderr] 12 |     time_signature_numerator: u8,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 13 |     time_signature_denominator: u8,
[INFO] [stderr]    |     ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `Transport` has derived impls for the traits `Debug` and `Clone`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: multiple methods are never used
[INFO] [stderr]   --> src/audio/transport.rs:25:12
[INFO] [stderr]    |
[INFO] [stderr] 16 | impl Transport {
[INFO] [stderr]    | -------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 25 |     pub fn play(&mut self) { self.state = TransportState::Playing; }
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 26 |     pub fn pause(&mut self) { self.state = TransportState::Paused; }
[INFO] [stderr]    |            ^^^^^
[INFO] [stderr] 27 |     pub fn stop(&mut self) { self.state = TransportState::Stopped; self.position_samples = 0; }
[INFO] [stderr]    |            ^^^^
[INFO] [stderr] 28 |     pub fn set_position_samples(&mut self, position: u64) { self.position_samples = position; }
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 29 |     pub fn get_position_samples(&self) -> u64 { self.position_samples }
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 30 |     pub fn get_state(&self) -> TransportState { self.state }
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 31 |     pub fn is_playing(&self) -> bool { self.state == TransportState::Playing }
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] 32 |     pub fn is_recording(&self) -> bool { self.state == TransportState::Recording }
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] 33 |     pub fn is_paused(&self) -> bool { self.state == TransportState::Paused }
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 34 |     pub fn is_stopped(&self) -> bool { self.state == TransportState::Stopped }
[INFO] [stderr]    |            ^^^^^^^^^^
[INFO] [stderr] 35 |
[INFO] [stderr] 36 |     pub fn advance_position(&mut self, frames: u64) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 50 |     pub fn set_loop(&mut self, enabled: bool, start: u64, end: u64) {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 53 |     pub fn is_loop_enabled(&self) -> bool { self.loop_enabled }
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 54 |
[INFO] [stderr] 55 |     pub fn set_bpm(&mut self, bpm: f64) { self.bpm = bpm.clamp(20.0, 999.0); }
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] 56 |     pub fn get_bpm(&self) -> f64 { self.bpm }
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] 57 |
[INFO] [stderr] 58 |     pub fn set_time_signature(&mut self, numerator: u8, denominator: u8) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 61 |     pub fn get_time_signature(&self) -> (u8, u8) { (self.time_signature_numerator, self.time_signature_denominator) }
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 62 |
[INFO] [stderr] 63 |     pub fn samples_to_beats(&self, samples: u64, sample_rate: u32) -> f64 {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 69 |     pub fn beats_to_samples(&self, beats: f64, sample_rate: u32) -> u64 {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 75 |     pub fn samples_to_time_string(&self, samples: u64, sample_rate: u32) -> String {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 83 |     pub fn samples_to_bars_beats_ticks(&self, samples: u64, sample_rate: u32) -> String {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `add_point` and `remove_point_at` are never used
[INFO] [stderr]   --> src/project/automation.rs:47:12
[INFO] [stderr]    |
[INFO] [stderr] 35 | impl AutomationLane {
[INFO] [stderr]    | ------------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 47 |     pub fn add_point(&mut self, time: f64, value: f32) {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 56 |     pub fn remove_point_at(&mut self, time: f64, tolerance: f64) {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `end_position`, `overlaps`, `set_trim`, `move_by`, and `source_path_buf` are never used
[INFO] [stderr]   --> src/project/clip.rs:48:12
[INFO] [stderr]    |
[INFO] [stderr] 47 | impl AudioClip {
[INFO] [stderr]    | -------------- associated items in this implementation
[INFO] [stderr] 48 |     pub fn new(source_path: String, name: String, position: u64, length: u64) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 65 |     pub fn end_position(&self) -> u64 {
[INFO] [stderr]    |            ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 69 |     pub fn overlaps(&self, start: u64, end: u64) -> bool {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 73 |     pub fn set_trim(&mut self, new_offset: u64, new_length: u64) {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 78 |     pub fn move_by(&mut self, delta: i64) {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 86 |     pub fn source_path_buf(&self) -> PathBuf {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `SnapMode` is never used
[INFO] [stderr]  --> src/project/editing.rs:4:10
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub enum SnapMode {
[INFO] [stderr]   |          ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `BeatDivision` is never used
[INFO] [stderr]   --> src/project/editing.rs:12:10
[INFO] [stderr]    |
[INFO] [stderr] 12 | pub enum BeatDivision {
[INFO] [stderr]    |          ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `Fps` is never used
[INFO] [stderr]   --> src/project/editing.rs:21:10
[INFO] [stderr]    |
[INFO] [stderr] 21 | pub enum Fps {
[INFO] [stderr]    |          ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: method `ticks_per_beat` is never used
[INFO] [stderr]   --> src/project/editing.rs:30:12
[INFO] [stderr]    |
[INFO] [stderr] 29 | impl BeatDivision {
[INFO] [stderr]    | ----------------- method in this implementation
[INFO] [stderr] 30 |     pub fn ticks_per_beat(&self) -> u64 {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `snap_to_grid` is never used
[INFO] [stderr]   --> src/project/editing.rs:42:8
[INFO] [stderr]    |
[INFO] [stderr] 42 | pub fn snap_to_grid(position: u64, bpm: f64, sample_rate: u32, mode: &SnapMode, relative_offset: u64, preserve_offset: bool) -> u64 {
[INFO] [stderr]    |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `split_clip` is never used
[INFO] [stderr]   --> src/project/editing.rs:78:8
[INFO] [stderr]    |
[INFO] [stderr] 78 | pub fn split_clip(clip: &AudioClip, split_position: u64) -> Option<(AudioClip, AudioClip)> {
[INFO] [stderr]    |        ^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MIN_STRETCH_RATIO` is never used
[INFO] [stderr]    --> src/project/editing.rs:120:11
[INFO] [stderr]     |
[INFO] [stderr] 120 | pub const MIN_STRETCH_RATIO: f32 = 0.25;
[INFO] [stderr]     |           ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: constant `MAX_STRETCH_RATIO` is never used
[INFO] [stderr]    --> src/project/editing.rs:121:11
[INFO] [stderr]     |
[INFO] [stderr] 121 | pub const MAX_STRETCH_RATIO: f32 = 4.0;
[INFO] [stderr]     |           ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `clamp_stretch_ratio` is never used
[INFO] [stderr]    --> src/project/editing.rs:123:8
[INFO] [stderr]     |
[INFO] [stderr] 123 | pub fn clamp_stretch_ratio(ratio: f32) -> f32 {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `create_time_stretch_params` is never used
[INFO] [stderr]    --> src/project/editing.rs:127:8
[INFO] [stderr]     |
[INFO] [stderr] 127 | pub fn create_time_stretch_params(ratio: f32) -> TimeStretchParams {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `create_auto_crossfade` is never used
[INFO] [stderr]    --> src/project/editing.rs:140:8
[INFO] [stderr]     |
[INFO] [stderr] 140 | pub fn create_auto_crossfade(clip_a: &mut AudioClip, clip_b: &mut AudioClip) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `clear_crossfade` is never used
[INFO] [stderr]    --> src/project/editing.rs:155:8
[INFO] [stderr]     |
[INFO] [stderr] 155 | pub fn clear_crossfade(clip_a: &mut AudioClip, clip_b: &mut AudioClip) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `clips_overlap` is never used
[INFO] [stderr]    --> src/project/editing.rs:160:8
[INFO] [stderr]     |
[INFO] [stderr] 160 | pub fn clips_overlap(a: &AudioClip, b: &AudioClip) -> bool {
[INFO] [stderr]     |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: enum `IoError` is never used
[INFO] [stderr]  --> src/project/io.rs:7:10
[INFO] [stderr]   |
[INFO] [stderr] 7 | pub enum IoError {
[INFO] [stderr]   |          ^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `save_project` is never used
[INFO] [stderr]   --> src/project/io.rs:26:8
[INFO] [stderr]    |
[INFO] [stderr] 26 | pub fn save_project(project: &Project, path: &Path) -> Result<(), IoError> {
[INFO] [stderr]    |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `load_project` is never used
[INFO] [stderr]   --> src/project/io.rs:33:8
[INFO] [stderr]    |
[INFO] [stderr] 33 | pub fn load_project(path: &Path) -> Result<Project, IoError> {
[INFO] [stderr]    |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `save_project_pretty` is never used
[INFO] [stderr]   --> src/project/io.rs:40:8
[INFO] [stderr]    |
[INFO] [stderr] 40 | pub fn save_project_pretty(project: &Project, path: &Path) -> Result<(), IoError> {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated function `new` is never used
[INFO] [stderr]   --> src/project/track.rs:37:12
[INFO] [stderr]    |
[INFO] [stderr] 36 | impl AuxSend {
[INFO] [stderr]    | ------------ associated function in this implementation
[INFO] [stderr] 37 |     pub fn new(target_id: Uuid) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] 
[INFO] [stderr] warning: methods `add_clip`, `remove_clip`, and `get_clips_in_range` are never used
[INFO] [stderr]   --> src/project/track.rs:77:12
[INFO] [stderr]    |
[INFO] [stderr] 56 | impl Track {
[INFO] [stderr]    | ---------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 77 |     pub fn add_clip(&mut self, clip: AudioClip) {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 82 |     pub fn remove_clip(&mut self, clip_id: Uuid) {
[INFO] [stderr]    |            ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 86 |     pub fn get_clips_in_range(&self, start: u64, end: u64) -> Vec<&AudioClip> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: variants `In` and `Out` are never constructed
[INFO] [stderr]   --> src/project/undo.rs:14:5
[INFO] [stderr]    |
[INFO] [stderr] 13 | pub enum FadeEdge {
[INFO] [stderr]    |          -------- variants in this enum
[INFO] [stderr] 14 |     In,
[INFO] [stderr]    |     ^^
[INFO] [stderr] 15 |     Out,
[INFO] [stderr]    |     ^^^
[INFO] [stderr]    |
[INFO] [stderr]    = note: `FadeEdge` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: enum `CoalesceKey` is never used
[INFO] [stderr]   --> src/project/undo.rs:19:10
[INFO] [stderr]    |
[INFO] [stderr] 19 | pub enum CoalesceKey {
[INFO] [stderr]    |          ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: multiple variants are never constructed
[INFO] [stderr]    --> src/project/undo.rs:31:5
[INFO] [stderr]     |
[INFO] [stderr]  30 | pub enum EditCommand {
[INFO] [stderr]     |          ----------- variants in this enum
[INFO] [stderr]  31 |     MoveClip {
[INFO] [stderr]     |     ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  37 |     MoveClipToTrack {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  42 |     ResizeClip {
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  50 |     SplitClip {
[INFO] [stderr]     |     ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  55 |     DeleteClips {
[INFO] [stderr]     |     ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  59 |     ChangeVolume {
[INFO] [stderr]     |     ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  64 |     ChangePan {
[INFO] [stderr]     |     ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  69 |     ChangeBusVolume {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  74 |     ChangeBusPan {
[INFO] [stderr]     |     ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  79 |     ChangeMasterVolume {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  83 |     ChangeMasterPan {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  87 |     ToggleMasterMute,
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^
[INFO] [stderr]  88 |     ChangeTrackOutput {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  93 |     ChangeBusOutput {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr]  98 |     AddSend {
[INFO] [stderr]     |     ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 103 |     RemoveSend {
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 108 |     SetFade {
[INFO] [stderr]     |     ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 115 |     TimeStretch {
[INFO] [stderr]     |     ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 123 |     AddTrack {
[INFO] [stderr]     |     ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 127 |     RemoveTrack {
[INFO] [stderr]     |     ^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 131 |     RemoveBus {
[INFO] [stderr]     |     ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 135 |     AddClip {
[INFO] [stderr]     |     ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 139 |     RemoveClip {
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 144 |     AddEffect {
[INFO] [stderr]     |     ^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 150 |     RemoveEffect {
[INFO] [stderr]     |     ^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 156 |     ChangeEffectParam {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 164 |     MoveEffect {
[INFO] [stderr]     |     ^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 170 |     ToggleEffectBypass {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 175 |     AddAutomationPoint {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 180 |     RemoveAutomationPoint {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 186 |     MoveAutomationPoint {
[INFO] [stderr]     |     ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `EditCommand` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: method `coalesce_key` is never used
[INFO] [stderr]    --> src/project/undo.rs:196:12
[INFO] [stderr]     |
[INFO] [stderr] 195 | impl EditCommand {
[INFO] [stderr]     | ---------------- method in this implementation
[INFO] [stderr] 196 |     pub fn coalesce_key(&self) -> Option<CoalesceKey> {
[INFO] [stderr]     |            ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `find_track_mut` is never used
[INFO] [stderr]    --> src/project/undo.rs:216:4
[INFO] [stderr]     |
[INFO] [stderr] 216 | fn find_track_mut(project: &mut Project, track_id: Uuid) -> Option<&mut Track> {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `find_bus_mut` is never used
[INFO] [stderr]    --> src/project/undo.rs:220:4
[INFO] [stderr]     |
[INFO] [stderr] 220 | fn find_bus_mut(project: &mut Project, bus_id: Uuid) -> Option<&mut Bus> {
[INFO] [stderr]     |    ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_effects_chain_mut` is never used
[INFO] [stderr]    --> src/project/undo.rs:224:4
[INFO] [stderr]     |
[INFO] [stderr] 224 | fn get_effects_chain_mut<'a>(project: &'a mut Project, target_id: Uuid, is_track: bool) -> Option<&'a mut Vec<EffectInstance>> {
[INFO] [stderr]     |    ^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `execute_command` is never used
[INFO] [stderr]    --> src/project/undo.rs:232:8
[INFO] [stderr]     |
[INFO] [stderr] 232 | pub fn execute_command(project: &mut Project, cmd: &EditCommand) {
[INFO] [stderr]     |        ^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `undo_command` is never used
[INFO] [stderr]    --> src/project/undo.rs:408:8
[INFO] [stderr]     |
[INFO] [stderr] 408 | pub fn undo_command(project: &mut Project, cmd: &EditCommand) {
[INFO] [stderr]     |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `commands` and `cursor` are never read
[INFO] [stderr]    --> src/project/undo.rs:589:5
[INFO] [stderr]     |
[INFO] [stderr] 588 | pub struct UndoStack {
[INFO] [stderr]     |            --------- fields in this struct
[INFO] [stderr] 589 |     commands: Vec<EditCommand>,
[INFO] [stderr]     |     ^^^^^^^^
[INFO] [stderr] 590 |     cursor: usize,
[INFO] [stderr]     |     ^^^^^^
[INFO] [stderr]     |
[INFO] [stderr]     = note: `UndoStack` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `clear`, `push`, `undo`, `redo`, `can_undo`, and `can_redo` are never used
[INFO] [stderr]    --> src/project/undo.rs:601:12
[INFO] [stderr]     |
[INFO] [stderr] 593 | impl UndoStack {
[INFO] [stderr]     | -------------- methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 601 |     pub fn clear(&mut self) {
[INFO] [stderr]     |            ^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 606 |     pub fn push(&mut self, cmd: EditCommand) {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 628 |     pub fn undo(&mut self, project: &mut Project) -> bool {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 641 |     pub fn redo(&mut self, project: &mut Project) -> bool {
[INFO] [stderr]     |            ^^^^
[INFO] [stderr] ...
[INFO] [stderr] 654 |     pub fn can_undo(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 658 |     pub fn can_redo(&self) -> bool {
[INFO] [stderr]     |            ^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `get_audio_formats` is never used
[INFO] [stderr]  --> src/utils/mod.rs:6:8
[INFO] [stderr]   |
[INFO] [stderr] 6 | pub fn get_audio_formats() -> Vec<&'static str> {
[INFO] [stderr]   |        ^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `is_audio_file` is never used
[INFO] [stderr]   --> src/utils/mod.rs:10:8
[INFO] [stderr]    |
[INFO] [stderr] 10 | pub fn is_audio_file(path: &Path) -> bool {
[INFO] [stderr]    |        ^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `format_time` is never used
[INFO] [stderr]   --> src/utils/mod.rs:18:8
[INFO] [stderr]    |
[INFO] [stderr] 18 | pub fn format_time(seconds: f64) -> String {
[INFO] [stderr]    |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `db_to_linear` is never used
[INFO] [stderr]   --> src/utils/mod.rs:25:8
[INFO] [stderr]    |
[INFO] [stderr] 25 | pub fn db_to_linear(db: f32) -> f32 {
[INFO] [stderr]    |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `linear_to_db` is never used
[INFO] [stderr]   --> src/utils/mod.rs:33:8
[INFO] [stderr]    |
[INFO] [stderr] 33 | pub fn linear_to_db(linear: f32) -> f32 {
[INFO] [stderr]    |        ^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: fields `min`, `max`, and `samples_per_peak` are never read
[INFO] [stderr]  --> src/utils/waveform.rs:6:9
[INFO] [stderr]   |
[INFO] [stderr] 5 | pub struct WaveformPeaks {
[INFO] [stderr]   |            ------------- fields in this struct
[INFO] [stderr] 6 |     pub min: Vec<f32>,
[INFO] [stderr]   |         ^^^
[INFO] [stderr] 7 |     pub max: Vec<f32>,
[INFO] [stderr]   |         ^^^
[INFO] [stderr] 8 |     pub samples_per_peak: usize,
[INFO] [stderr]   |         ^^^^^^^^^^^^^^^^
[INFO] [stderr]   |
[INFO] [stderr]   = note: `WaveformPeaks` has derived impls for the traits `Clone` and `Debug`, but these are intentionally ignored during dead code analysis
[INFO] [stderr] 
[INFO] [stderr] warning: methods `get_peak` and `num_peaks` are never used
[INFO] [stderr]   --> src/utils/waveform.rs:46:12
[INFO] [stderr]    |
[INFO] [stderr] 11 | impl WaveformPeaks {
[INFO] [stderr]    | ------------------ methods in this implementation
[INFO] [stderr] ...
[INFO] [stderr] 46 |     pub fn get_peak(&self, index: usize) -> (f32, f32) {
[INFO] [stderr]    |            ^^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 54 |     pub fn num_peaks(&self) -> usize {
[INFO] [stderr]    |            ^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `generate_waveform_cache` is never used
[INFO] [stderr]   --> src/utils/waveform.rs:59:8
[INFO] [stderr]    |
[INFO] [stderr] 59 | pub fn generate_waveform_cache(buffer: &AudioBuffer, width: usize) -> WaveformPeaks {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `render_waveform_data_url` is never used
[INFO] [stderr]   --> src/utils/waveform.rs:63:8
[INFO] [stderr]    |
[INFO] [stderr] 63 | pub fn render_waveform_data_url(peaks: &WaveformPeaks, width: u32, height: u32) -> String {
[INFO] [stderr]    |        ^^^^^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: struct `TimeStretchProcessor` is never constructed
[INFO] [stderr]  --> src/utils/timestretch.rs:4:12
[INFO] [stderr]   |
[INFO] [stderr] 4 | pub struct TimeStretchProcessor {
[INFO] [stderr]   |            ^^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: associated items `new`, `stretch`, and `stretch_to_duration` are never used
[INFO] [stderr]   --> src/utils/timestretch.rs:9:12
[INFO] [stderr]    |
[INFO] [stderr]  8 | impl TimeStretchProcessor {
[INFO] [stderr]    | ------------------------- associated items in this implementation
[INFO] [stderr]  9 |     pub fn new(sample_rate: u32) -> Self {
[INFO] [stderr]    |            ^^^
[INFO] [stderr] ...
[INFO] [stderr] 13 |     pub fn stretch(&self, buffer: &AudioBuffer, ratio: f32) -> Result<AudioBuffer, String> {
[INFO] [stderr]    |            ^^^^^^^
[INFO] [stderr] ...
[INFO] [stderr] 29 |     pub fn stretch_to_duration(&self, buffer: &AudioBuffer, target_samples: usize) -> Result<AudioBuffer, String> {
[INFO] [stderr]    |            ^^^^^^^^^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: function `pitch_shift` is never used
[INFO] [stderr]   --> src/utils/timestretch.rs:40:8
[INFO] [stderr]    |
[INFO] [stderr] 40 | pub fn pitch_shift(_semitones: f32) -> f32 {
[INFO] [stderr]    |        ^^^^^^^^^^^
[INFO] [stderr] 
[INFO] [stderr] warning: `hdaw` (bin "hdaw" test) generated 77 warnings (run `cargo fix --bin "hdaw" -p hdaw --tests` to apply 1 suggestion)
[INFO] [stderr]     Finished `test` profile [unoptimized + debuginfo] target(s) in 0.31s
[INFO] [stderr]      Running unittests src/main.rs (/opt/rustwide/target/debug/deps/hdaw-932a066e33371931)
[INFO] [stdout] 
[INFO] [stdout] running 0 tests
[INFO] [stdout] 
[INFO] [stdout] test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
[INFO] [stdout] 
[INFO] running `Command { std: "docker" "inspect" "238b8921da4d2613c94dbd5941e46d1f285971e86ea72379ff1f460400a02589", kill_on_drop: false }`
[INFO] running `Command { std: "docker" "rm" "-f" "238b8921da4d2613c94dbd5941e46d1f285971e86ea72379ff1f460400a02589", kill_on_drop: false }`
[INFO] [stdout] 238b8921da4d2613c94dbd5941e46d1f285971e86ea72379ff1f460400a02589
